Publié par ShiningRay le 3 avril 2006
Edwin Martin < [email protected] >
Traduit par : ShiningRay @ Nirvana Studio
Je développe des applications PHP depuis quatre ans. PHP est vraiment facile à écrire. Mais PHP présente également de très sérieux défauts.
Ci-dessous, je vais donner les raisons pour lesquelles PHP ne convient pas aux sites Web plus grands que les petits sites Web amateurs.
1. Mauvaise prise en charge de la récursion La récursivité est un mécanisme permettant aux fonctions de s'appeler elles-mêmes. Il s’agit d’une fonctionnalité puissante qui peut transformer quelque chose de complexe en quelque chose de très simple. Un exemple d’utilisation de la récursion est le tri rapide. Malheureusement, PHP n'est pas très bon en récursivité. Zeev, un développeur PHP, a déclaré : « PHP 4.0 (Zend) utilise une approche par pile pour les données denses plutôt qu'une approche par tas. Cela signifie que le nombre de fonctions récursives qu'il peut tolérer est nettement moins limité que les autres langages. » . C'est une très mauvaise excuse. Chaque langage de programmation doit fournir un bon support de récursivité.
2. De nombreux modules PHP ne sont pas thread-safe Il y a quelques années, Apache a publié la version 2.0 du serveur Web. Cette version prend en charge le mode multi-threading, dans lequel une partie du logiciel peut exécuter plusieurs parties en même temps. L'inventeur de PHP affirme que le cœur de PHP est thread-safe, mais que les modules non essentiels ne le sont peut-être pas. Mais neuf fois sur dix, vous souhaitez utiliser ce module dans un script PHP, mais cela rend votre script incompatible avec le mode multithread d'Apache. C'est pourquoi l'équipe PHP déconseille d'exécuter PHP en mode multithread d'Apache 2. La mauvaise prise en charge du mode multithread par PHP est souvent citée comme l'une des raisons pour lesquelles Apache 2 reste impopulaire.
Veuillez lire cette discussion : Slashdot : Sites rejetant Apache 2 ?.
3. PHP est en panne pour des raisons commerciales En utilisant la mise en cache, les performances de PHP peuvent être augmentées de 500 % [voir benchmark]. Alors pourquoi la mise en cache n'est-elle pas intégrée à PHP ? Parce que Zend, le fabricant de PHP, vend son propre accélérateur Zend, ils ne veulent donc bien sûr pas abandonner leur produit commercial.
Mais il existe une autre alternative : APC. (Zend a ensuite lancé Zend Optimizer, un accélérateur-traducteur gratuit)
4. Pas d'espace de noms Imaginez que quelqu'un ait créé un module PHP pour lire des fichiers. Une fonction du module est appelée read. Le module d'une autre personne peut alors lire la page Web, qui contient également une fonction read. Ensuite, nous ne pouvons pas utiliser ces deux modules en même temps, car PHP ne sait pas quelle fonction vous souhaitez utiliser.
Mais il existe une solution très simple : les espaces de noms. Quelqu'un a un jour suggéré d'ajouter cette fonctionnalité à PHP5, mais malheureusement il ne l'a pas fait. Désormais, sans espaces de noms, chaque fonction doit être préfixée par le nom du module pour éviter les conflits de noms. Cela se traduit par des noms de fonctions horriblement longs, tels que xsl_xsltprocessor_transform_to_xml, ce qui rend le code difficile à écrire et à comprendre.
5. Caractères de format de date non standard De nombreux programmeurs sont familiers avec les caractères de format de date, issus des langages UNIX et C. Plusieurs autres langages de programmation ont adopté cette norme, mais curieusement, PHP possède son propre jeu de caractères de format de date totalement incompatibles. En C, "%j" représente le jour de l'année, et en PHP il représente le jour du mois. Cependant, pour rendre les choses encore plus confuses : la fonction strftime et la fonction date_format de Smarty (un moteur de modèles PHP populaire) utilisent des caractères de formatage C/UNIX.
6. Licence déroutante Vous pourriez penser que PHP est gratuit, tout comme tous les modules PHP mentionnés dans le manuel. Faux! Par exemple, si vous souhaitez générer des fichiers PDF en PHP, vous trouverez deux modules dans le manuel : PDF et ClibPDF. Mais ces deux produits sont sous licence commerciale. Ainsi, pour chaque module que vous utilisez, vous devez vous assurer que vous acceptez sa licence.
7. Règles de dénomination des fonctions incohérentes Certains noms de fonctions sont composés de plusieurs mots. Il existe généralement trois habitudes de combinaisons de mots :
épissage direct : getnumberoffiles
Séparez par des traits de soulignement : get_number_of_files
Loi de Camel : getNumberOfFiles
Pour la plupart des langues, choisissez-en une. Mais PHP est utilisé.
Par exemple, si vous souhaitez convertir certains caractères spéciaux en entités HTML, vous utiliserez la fonction htmlentities (épissage direct des mots). Si vous souhaitez utiliser la fonctionnalité inverse, vous devez utiliser son petit frère html_entity_decode. Pour une raison particulière, le nom de cette fonction comporte des mots séparés par des traits de soulignement. Comment est-ce possible ? Vous savez qu'il existe une fonction appelée strpad. Ou est-il str_pad ? À chaque fois, vous devez vérifier quel est le symbole ou simplement attendre une erreur. Les fonctions ne sont pas sensibles à la casse, donc pour PHP, il n'y a aucune différence entre rawurldecode et RawUrlDecode. C’est également mauvais car les deux sont utilisés et leur apparence est différente, ce qui déroute le lecteur.
8. L'enfer des citations magiques Les citations magiques peuvent protéger les scripts PHP des attaques par injection SQL. C'est bien. Mais pour certaines raisons, vous pouvez désactiver cette configuration dans le php.ini. Donc, si vous souhaitez écrire un script flexible, vous devez toujours vérifier si les références magiques sont activées ou désactivées. Une telle « fonctionnalité » est censée faciliter la programmation, mais en fait, elle la rend plus compliquée.
9. Absence de cadre standard Un site Web en pleine croissance sans cadre global finira par devenir un cauchemar de maintenance. Un framework peut faciliter de nombreuses tâches. Le modèle de framework le plus populaire à l'heure actuelle est le modèle MVC, dans lequel la couche de présentation, la logique métier et l'accès à la base de données sont séparés.
De nombreux sites Web PHP n'utilisent pas le modèle MVC. Ils n'ont même pas de cadre. Même maintenant, il existe quelques frameworks PHP et vous pouvez en écrire un vous-même. Les articles et manuels sur PHP n'améliorent pas un mot le framework. Alors que les développeurs JSP utilisent des frameworks comme Struts et que les développeurs ASP utilisent .Net, il semble que ces concepts soient largement compris par les développeurs PHP. Cela montre à quel point PHP est professionnel.
Résumer
Quel est le problème ?
Pour les très petits projets, cela peut être un langage de programmation très satisfaisant. Mais pour les projets plus importants et plus complexes, PHP montre sa faiblesse. En poursuivant votre exploration, vous trouverez des solutions à certains des problèmes que j’ai mentionnés. Alors, une fois la solution connue, pourquoi ne pas la corriger ? Aussi pourquoi ces correctifs ne sont-ils pas mentionnés dans le manuel ?
C'est une bonne chose qu'un langage open source soit très populaire. Mais malheureusement, ce n'est pas une grande langue. J'espère qu'un jour tous les problèmes seront résolus (peut-être en PHP6 ?), et alors nous aurons un langage open source à la fois open source et facile à utiliser.
À l'heure actuelle, lorsque vous souhaitez démarrer un projet avec plus de 5 pages de script, vous feriez mieux d'envisager C#/ASP.Net ou Java/JSP ou peut-être que Python est également un meilleur choix.
Source de cet article : http://workgroup.cn/CS/blogs/php/archive/2006/06/29/1354.aspx