web-dev-qa-db-fra.com

Non PHP pour les grands projets? Pourquoi pas?

J'ai lu quelques articles où les gens ont déclaré (non suggérés, non discutés, non proposés) que PHP ne devrait pas être utilisé pour les grands projets.

Étant principalement un développeur PHP, je pose deux questions:

  1. Qu'est-ce qui définit un "grand projet"?
  2. Pourquoi pas? Quels sont les pièges de l'utilisation de PHP

Je dirige une petite équipe de développement et je sais par expérience que la qualité de la construction, de l'organisation, de la documentation, des commentaires et de l'encapsulation est notre priorité absolue. Nous sommes en mesure de développer de grands projets en utilisant notre propre cadre et notre propre approche, mais je ne veux pas investir davantage si je perds mon temps.

Pensées?

64
jerebear

Je déteste vraiment quand les gens disent carrément que PHP est un langage terrible parce que vous pouvez écrire du code qui mélange la présentation avec la logique, ou qu'il vous permet d'autoriser l'injection SQL. Cela n'a rien à voir avec le langage, c'est le développeur.

PHP s'est révélé hautement évolutif: Wikipédia est l'un des sites les plus importants et les plus populaires sur Internet et il exécute PHP. Assez dit?

Il existe de nombreux outils/bibliothèques qui vous donnent un cadre de travail, ce qui rend moins probable que quelqu'un écrive du code médiocre et moins maintenable: voir CakePHP, Symfony, PDO, Smarty, etc. etc.

Il a reçu une mauvaise réputation car c'est un langage qui a de très faibles barrières à l'entrée: c'est gratuit, vous pouvez obtenir un hébergement très bon marché PHP hébergement, la documentation est la meilleure qui soit, il y a beaucoup de tutoriels en ligne, plus cela rend beaucoup de choses très faciles (par exemple: ouvrir une URL et obtenir le contenu du fichier: file('http://www.google.com');). Cela signifie que beaucoup de débutants l'ont choisi et ont créé beaucoup de sites très douteux avec, mais cela se produira avec la langue que vous choisirez en premier.

Travaillez avec un cadre ORM solide (il y a environ 30 questions sur SO sur lequel est le meilleur), et cela vous traitera bien.

94
nickf

Beaucoup de gens qui disent ne pas l'utiliser disent vraiment ne pas utiliser PHP 4. Cela revient à ceci

vous pouvez écrire du bon code dans n'importe quelle langue

et

vous pouvez écrire du mauvais code dans n'importe quelle langue

PHP peut très souvent se prêter à devenir des bibliothèques de code spaghetti enchevêtrées et faire de votre `` application '' une simple série de scripts (voir Moodle pour un bon exemple de cela ...)

Je pense qu'une grande partie du 'Ne pas utiliser PHP pour les gros trucs' 'vient de PHP étant piraté à partir de son objectif initial: un langage de création de modèles. Ce que je peux comprendre, mais il y a beaucoup de projets qui prouvent que vous pouvez le faire (Drupal, mediawiki, Facebook).

31
jskulski

Il n'y a aucune raison pour laquelle vous ne pouvez pas utiliser PHP pour les grands projets. Après tout, Facebook est construit sur PHP. Il y aura cependant des problèmes mais il y aura des problèmes avec n'importe quel grand projet.

Ce qui rend PHP si omniprésent est la faible barrière à l'entrée et à l'hébergement bon marché. Il fonctionne comme une extension Apache et vous pouvez à peu près commencer à coder. Si vous allez vers plus de plates-formes d'entreprise telles que .Net. ou Java, ils ont une barrière à l'entrée beaucoup plus élevée, mais ils sont également fournis avec une grande infrastructure pour vous aider à créer des applications à cette échelle.

Par exemple, l'abstraction de la base de données dans PHP est (à mon humble avis) malheureuse. Elle est spécifique au fournisseur. Avec MySQL, les gens ont tendance à faire des choses comme:

function get_users($surname) {
  mysql_query("select * from users where surname = '$surname'");
  ...
}

ce qui est mauvais pour plusieurs raisons:

  • Il utilise mal le cache de requêtes;
  • Il ne gère pas l'échappement des caractères (ce qui, bien sûr, peut être fait avec mysql_escape_string() mais vous serez surpris de voir à quelle fréquence les gens ne le font pas); et
  • Il est assez facile de coder de manière à permettre les attaques par injection SQL.

Personnellement, je préfère mysqli pour toutes les raisons ci-dessus mais il a ses propres problèmes: à savoir que l'utilisation des champs LONGTEXT plante mysql et ce depuis au moins 2005 sans solution (oui, moi et plusieurs autres ont soulevé un bogue).

Comparez cela à Java (avec lequel je suis plus familier) et JPA ou Ibatis sont de bien meilleures solutions ORM avec des coûts de démarrage plus élevés, mais ils vous aideront à l'échelle de l'entreprise.

Il n'est donc pas interdit de faire de gros projets sur PHP. C'est tout simplement plus difficile que vous devez faire de plus en plus de travail vous-même pour reproduire ce que les autres plates-formes vous fournissent.

Cela étant dit, PHP + memcached/APC + beanstalkd va un long chemin.

Oh, c'est l'autre problème: PHP ne prend pas vraiment en charge le traitement en arrière-plan ou le threading. Vous avez besoin d'autre chose pour cela (ou de scripts autonomes). Si vous utilisez autre chose, pourquoi ne pas l'utiliser pour le Web aussi (par exemple Java, Ruby, .Net, etc.)?

18
cletus

Comme la question que j'ai liée a été supprimée, je vais en placer une partie ici:

Question


J'ai fait un commentaire ironique dans un autre fil de questions appelant PHP un langage terrible et il a été critiqué comme un fou. Apparemment, il y a beaucoup de gens ici qui aiment PHP.

Je suis donc vraiment curieux. Qu'est-ce que je rate? Qu'est-ce qui fait de PHP un bon langage?)

Voici mes raisons de ne pas l'aimer:

  • PHP a une dénomination incohérente des fonctions intégrées et de la bibliothèque. Les modèles de dénomination prévisibles sont importants dans toute conception.

  • PHP a un ordre des paramètres incohérent des fonctions intégrées, par exemple array_map contre array_filter, ce qui est ennuyeux dans les cas simples et soulève toutes sortes de comportements inattendus ou pire.

  • Les développeurs PHP déprécient constamment les fonctions intégrées et les fonctionnalités de niveau inférieur. Un bon exemple est quand ils ont abandonné le passage par référence pour les fonctions. Cela a créé un cauchemar pour tous ceux qui font, par exemple, des fonctions. rappels.

  • Un manque de considération dans la refonte. L'obsolescence ci-dessus a éliminé la possibilité, dans de nombreux cas, de fournir des valeurs de mots clés par défaut pour les fonctions. Ils ont corrigé cela dans PHP 5, mais ils ont déprécié le passage par référence dans PHP 4!

  • Mauvaise exécution des espaces de nom (auparavant aucun espace de nom). Maintenant que les espaces de nom existent, qu'utilisons-nous comme caractère de déréférence? Backslash! Le caractère utilisé universellement pour s'échapper, même en PHP!

  • Une conversion de type implicite trop large conduit à des bogues. Je n'ai aucun problème avec les conversions implicites de, disons, float en entier ou inversement. Mais PHP (le dernier que j'ai vérifié) tentera volontiers de convertir par magie un tableau en entier.

  • Mauvaises performances de récursivité. La récursivité est un outil fondamentalement important pour écrire dans n'importe quelle langue; cela peut rendre les algorithmes complexes beaucoup plus simples. Un mauvais soutien est inexcusable.

  • Les fonctions sont insensibles à la casse. Je n'ai aucune idée de ce qu'ils pensaient sur celui-ci. Un langage de programmation est un moyen de spécifier le comportement à la fois d'un ordinateur et d'un lecteur du code sans ambiguïté. L'insensibilité à la casse introduit beaucoup d'ambiguïté.

  • PHP encourage (nécessite pratiquement) un couplage de traitement avec présentation. Oui, vous pouvez écrire PHP qui ne le fait pas, mais il est en fait plus facile d'écrire du code de manière incorrecte (du point de vue de la conception sonore).

  • Les performances PHP sont épouvantables sans mise en cache. Quelqu'un vend-il un produit de mise en cache commercial pour PHP? Oh, regardez, les concepteurs de PHP faire.

Pire encore, PHP convainc les gens que la conception d'applications Web est facile. Et cela facilite en effet une grande partie de l'effort impliqué. Mais le fait est que la conception d'une application Web à la fois sécurisée et efficace est une tâche très difficile.

En convaincant un si grand nombre de se lancer dans la programmation, PHP a enseigné à tout un sous-groupe de programmeurs de mauvaises habitudes et une mauvaise conception. Cela leur a donné accès à des capacités qu'ils n'ont pas la compréhension d'utiliser en toute sécurité. Cela a conduit à la réputation de PHP d'insécurité.

(Cependant, j'admets volontiers que PHP n'est ni plus ni moins sécurisé que tout autre langage de programmation Web.)

Qu'est-ce qui me manque dans PHP? Je vois un désordre organique et mal géré d'un langage qui engendre de pauvres programmeurs.

Alors convainquez-moi du contraire!


Réponse la mieux notée


Je vais essayer de répondre à chacun de vos puces

PHP a une dénomination incohérente des fonctions intégrées et de la bibliothèque. Les modèles de dénomination prévisibles sont importants dans toute conception.

J'aime et déteste ce sujet. Parce qu'à la base, ce problème est correct. Pourquoi certaines fonctions bi-Word sont-elles séparées par un trait de soulignement, et d'autres non? Pourquoi les paramètres de l'aiguille et de la botte de foin intervertissent parfois les positions dans la signature d'argument? C'est ridicule. Mais en fin de compte ... est-ce vraiment important? Mon IDE avec intellisense et php.net à un clic de navigateur, ce n'est tout simplement pas si grave. Est-ce un négatif par rapport à PHP as un langage? Oui. Est-ce que cela entrave ma capacité à être un programmeur efficace? Non.

Les développeurs PHP déprécient constamment les fonctions intégrées et les fonctionnalités de niveau inférieur. Un bon exemple est quand ils ont abandonné le passage par référence pour les fonctions. Cela a créé un cauchemar pour tous ceux qui font, par exemple, des fonctions. rappels.

Personnellement, je pense que ce n'est pas un bon point. La dépréciation est nécessaire à l'évolution d'un langage, en particulier celui qui a autant de kruft que PHP fait. PHP reçoit beaucoup de reproches pour "rendre les choses faciles être un mauvais programmeur * "mais en même temps, le groupe PHP) a également des problèmes quand il essaie de supprimer des constructions stupides du langage, telles que le passage par référence au moment de l'appel L'élimination du passage par référence du temps d'appel a été l'un des meilleurs mouvements qu'ils aient jamais faits. Il n'y avait pas de moyen plus facile pour un développeur novice de se tirer une balle dans le pied qu'avec cette "fonctionnalité".

Un manque de considération dans la refonte. L'obsolescence ci-dessus a éliminé la possibilité, dans de nombreux cas, de fournir des valeurs de mots clés par défaut pour les fonctions. Ils ont corrigé cela dans PHP 5, mais ils ont déprécié le passage par référence dans PHP 4!

Je ne pense pas qu'il y ait un manque général de considération du tout, je pense que vous venez de vous faire piquer par ce changement particulier et que vous avez un goût amer dans la bouche. Les changements de langue sont souvent connus des mois sinon des années à l'avance. Un guide de migration a été fourni pour le passage de 4 à 5, et les différences de version sont documentées dans le manuel. Le passage par référence au moment des appels était une horrible "fonctionnalité" et ne donne au développeur aucun pouvoir expressif qu'il ne peut obtenir par d'autres moyens. Je suis content que ça soit parti (avec d'autres conneries comme des citations magiques)

Mauvaise exécution des espaces de nom (auparavant aucun espace de nom). Maintenant que les espaces de nom existent, qu'utilisons-nous comme caractère de déréférence? Backslash! Le caractère utilisé universellement pour s'échapper, même en PHP!

J'ai des sentiments mitigés à ce sujet. Une partie de moi pense "qu'importe, échapper à un personnage n'a pas de sens en dehors d'une chaîne de toute façon", et une partie de moi pense "sûrement qu'ils pourraient utiliser quelque chose de mieux". Mais pourraient-ils? Je ne sais pas, je ne suis pas un développeur pour l'analyseur Zend. Est-ce un énorme oubli que jusqu'à 5.3 PHP n'a jamais eu d'espaces de noms du tout? Oui, absolument.

Une conversion de type implicite trop large conduit à des bogues. Je n'ai aucun problème avec les conversions implicites de, disons, float en entier ou inversement. Mais PHP (le dernier que j'ai vérifié) tentera volontiers de convertir par magie un tableau en entier.

Je pense qu'il est normal de ne pas être d'accord avec la façon dont PHP fait cela, mais je ne suis pas d'accord pour dire que cela rend le langage "mauvais". Mais demandez-moi à quel point je veux m'asseoir dans ce sujet et discuter du faible contre le fort (PS je ne sais pas, du tout ) Pour mémoire: PHP émettra une erreur de niveau E_WARNING lorsque le type d'un argument compte et ne peut pas être résolu par la contrainte.

Mauvaises performances de récursivité. La récursivité est un outil fondamentalement important pour écrire dans n'importe quelle langue; cela peut rendre les algorithmes complexes beaucoup plus simples. Un mauvais soutien est inexcusable.

PHP est un DSL pour le Web. Je le fais à plein temps depuis 8 ans et j'ai peut-être utilisé la récursivité 4 ou 5 fois, généralement pour un certain type de répertoire ennuyeux ou de traversée XML. Ce n'est tout simplement pas un modèle nécessaire au développement Web si souvent. Je n'excuse pas la lenteur des performances, mais c'est un problème académique bien plus qu'un problème de production. Si vous avez besoin de performances récursives vraiment puissantes, PHP est déjà le mauvais langage pour vous.

Les fonctions sont insensibles à la casse. Je n'ai aucune idée de ce qu'ils pensaient sur celui-ci. Un langage de programmation est un moyen de spécifier le comportement à la fois d'un ordinateur et d'un lecteur du code sans ambiguïté. L'insensibilité à la casse introduit beaucoup d'ambiguïté.

Je suis totalement d'accord avec cela.

PHP encourage (nécessite pratiquement) un couplage de traitement avec présentation. Oui, vous pouvez écrire PHP qui ne le fait pas, mais il est en fait plus facile d'écrire du code de manière incorrecte (du point de vue de la conception sonore).

* Hmmm, ce sujet semble désespérément familier ...

Mais sérieusement, je trouve remarquable que les gens se plaignent d'un langage qui vous permettra absolument à 100% d'implémenter n'importe quel système de sortie que vous voulez (le volume et le style de PHP systèmes de modélisation à eux seuls en parlent ) - OR - ignorer tous ces frais généraux et simplement sortir directement. Cela ne rend pas PHP mauvais du tout. Cela fait partie de ce qui rend PHP bien.

Les performances PHP sont épouvantables sans mise en cache. Quelqu'un vend-il un produit de mise en cache commercial pour PHP? Oh, regardez, les concepteurs de PHP faire.

Voulez-vous dire la mise en cache bytecode (comme un accélérateur) ou la mise en cache de sortie?

Si le premier, alors je ne sais pas vraiment à quel point je me soucie de ce sujet. Les accélérateurs sont gratuits et faciles à utiliser. Nous pourrions discuter de la raison pour laquelle cela ne fait pas partie de la langue, mais au final, je ne pense pas que cela compte beaucoup.

Si vous parlez de la mise en cache de sortie, je ne sais pas quoi vous dire. TOUT projet Web avec un trafic important doit être mis en cache (podcast de départ n ° 27, par exemple). Ce n'est pas du tout un problème spécifique à PHP .

En résumé, je pense que vous considérez PHP un "mauvais" langage de façon très académique. Et dans votre précédent post, vous avez probablement été rejeté par des gens comme moi qui utilisent PHP pour "faire avancer les choses".


Deuxième réponse la mieux notée


Toutes vos critiques (et quelques autres) sont valables. Vous êtes autorisé et même censé détester PHP.

Mais, là encore, cela présente certains avantages:

  • Omniprésent
  • Rapide (en particulier en utilisant des caches d'opcode)
  • Immense communauté (et excellente documentation)
  • Travaux

Enfin, vous pouvez surmonter de nombreux sinon tous les inconvénients en écrivant un bon code que vous écririez dans n'importe quel autre langage. Vous pouvez écrire du code solide, sécurisé et bien senti en PHP, qui sera souvent exécuté plus rapidement et sera plus facile à héberger et à évoluer que de nombreuses alternatives.


Troisième réponse la mieux notée


Qu'est-ce qui me manque dans PHP? Je vois un désordre organique et mal géré d'un langage qui engendre de pauvres programmeurs.

Facile. Le fait que les programmeurs pauvres soient très défensifs quant à leur langage. ;) PHP est facile à apprendre, beaucoup plus facile que les alternatives, et une fois que vous l'avez appris, ce n'est pas vraiment évident 1) ce qui ne va pas avec PHP, 2) comment les alternatives sont meilleures, et 3) comment passer et apprendre l'une des alternatives.

Et peut-être le fait que, eh bien, quelles alternatives les gens ont-ils? ASPIC? Cela pose de nombreux problèmes en soi, de l'impossibilité de fonctionner sur la majorité des serveurs Web (Apache) à certains choix de conception ridicules et sur-conçus en soi (formulaires Web? Viewstate? AJAX où votre les requêtes "asynchrones" sont interceptées et exécutées séquentiellement ?) Ruby on Rails? Eh bien, peut-être, sauf combien de serveurs Web prennent en charge Ce n'est pas vraiment facilement accessible pour le moment. Et c'est lent. Alors peut-être que la "force" de PHP est vraiment qu'aucune bonne alternative n'existe. Au moins c'est pourquoi je reste à l'écart de toute programmation Web lorsque cela est possible. PHP est nul, et je ne suis pas trop intéressé par aucune des alternatives.

PHP a tellement de problèmes fondamentaux que ce n'est même pas drôle. De l'absence de support Unicode, aux nombreuses conversions de type implicites qui conduisent souvent à des failles de sécurité inattendues, au mélange complet de présentation et ... tout le reste, ou au module de base de données par défaut qui n'utilise pas (dernière vérification) requêtes paramétrées. Nous parlons d'un langage fait pour deux choses, l'accès aux bases de données et la génération de HTML, et qui est terrible à la fois.

C'est juste un désordre, un langage conçu par des personnes qui ne sont pas qualifiées ou capables de concevoir un langage. ;)


17
Vinko Vrsalovic

Pour moi, le pire PHP sin est le couplage de la présentation avec la logique métier. Ce n'est pas que vous ne pouvez pas l'écrire d'une meilleure manière, mais cela ne vous encourage pas à vous encourage à ne pas le faire.

Un grand nombre de vulnérabilités de sécurité sont associées à PHP sites aussi. Je ne peux pas prouver que c'est disproportionné (après tout, beaucoup de sites sont écrits en PHP), mais je suppose que c'est le cas. Si j'ai raison, alors que les vulnérabilités de sécurité sont une classe de bogues, je soupçonne PHP les sites ont tendance à être plus bogués dans l'ensemble également.

(Je ne pense pas qu'indiquer quelques grands sites et dire qu'ils ont réussi à le faire en PHP est un argument contre cela, au fait. C'est un peu comme dire que les cigarettes ne sont pas t causer le cancer parce que votre voisin a fumé et a vécu jusqu'à 100 ans.)

4
frankodwyer

Consultez cette question similaire - Peut PHP gérer les sites de niveau entreprise ainsi que Java

Récapitulation - Facebook, Wikipedia, Yahoo.com, Digg, Flickr et de nombreux autres sites géants fonctionnent sur PHP. Si jamais vous êtes près de faire quelque chose de ce calibre, vous pouvez toujours être assuré que vous pouvez y arriver avec PHP.

Le niveau de maintenance, d'extension, de fiabilité, de sécurité et de performance de vos applications dépend entièrement de vous et est indépendant du langage. En faveur de PHP cependant, il dispose d'outils très pratiques pour créer des applications Web.

2
Eran Galperin

Pour moi, et pour parler de projets volumineux, voire énormes, cela se résume (principalement) à un mot: Dépendances.

Le problème avec un langage de script est comme partout dans le monde: le plus grand avantage est le plus grand inconvénient en même temps.

Le plus grand avantage est de coder gratuitement et rapidement. Écrivez simplement un script et il servira son but. Aucune verbosité nécessaire, il suffit de coder.

Le plus grand inconvénient est, en quelque sorte, de vérifier si ce script ne dérange pas les autres scripts. Ou mieux: changez un ancien script sur lequel d'autres s'appuient. Êtes-vous sûr que toutes les dépendances fonctionnent comme vous le souhaitez?

Ce n'est pas vrai pour la génération "normale" de pages Web, quel que soit le sens normal ici. Mais nous avons un produit reposant sur quelque 500 000 lignes de code source, avec des personnalisations pour les clients comprenant également 100 000 lignes de code supplémentaires. Et je suis extrêmement heureux qu'un compilateur vérifie toutes les dépendances et me prévient/me trompe au cas où je ferais quelque chose de mal (comme, parler du niveau le plus bas ici, mal saisir une variable ou un appel de méthode).

Je pense que cela et le fait que d'autres langages fournissent des fonctionnalités "d'entreprise" plus simples à utiliser de par leur nature (c'est-à-dire des serveurs d'applications pour les "usages bancaires") résume pourquoi beaucoup ne voient pas PHP = dans les grands projets (ou mieux: énormes).

2
Georgi

Il y a quelque chose dans la construction du langage PHP qui n'est pas assez bon pour moi. Par exemple, le nom des fonctions. Ce n'est pas une bonne pratique d'utiliser plusieurs façons de nommer une fonction dans une langue. Le mélange entre les traits de soulignement (nom_fonction), les mots collent ensemble (nom_fonction), etc. Je veux dire, c'est vraiment un gâchis. Il y a trop de fonctions qui sont très similaires ou font les mêmes choses, mais leurs noms sont tellement déroutants Cela n’est pas caractéristique d’un bon langage de programmation.

Dans les grands déploiements, le langage doit être suffisamment simple et spécifique à écrire. Quelque chose qui PHP omet comme la déclaration des types de variables, devient très difficile à comprendre et à traiter plus tard.

Un autre point est l'ajout constant de fonctionnalités et l'annulation de certaines autres. Cela suppose que l'ajout de OOP in PHP 5) va faciliter les choses pour les programmeurs, mais qu'en est-il des considérations de rétro-compatibilité?

La principale raison pour laquelle ce langage de programmation est comme il est, est due à ses origines: Page d'accueil personnelle. Il n'a pas été conçu pour les grands déploiements.

Je sais qu'il y a de grands efforts pour faire de ce langage un langage de poids d'entreprise, et personnellement, j'attends un assez bon langage de programmation open source côté serveur; mais jusqu'à ce que ce jour arrive, il va couler beaucoup d'eau sous le pont.

1
nidorano

Ce sont toutes de bonnes réponses.

J'étais un débutant. Je ne codifie que depuis 5 ans, mais je supporte et gère directement 85 petits et grands sites Web et je vais vous dire quoi, le potentiel d'être poursuivi en ayant un site Web en panne pendant une journée contribuera beaucoup à votre désir d'apprendre. comment et créer un meilleur code.

C'est agréable d'entendre des développeurs établis partager leurs réflexions à ce sujet. Je ne pense pas que PHP est le meilleur, mais il semble que mon investissement dans les "meilleures pratiques" soit bien servi.

Merci tout le monde!

0
jerebear
0
J. Taylor

Notre société gère plusieurs sites Web de grande taille utilisant PHP et n'a rencontré aucun problème lié à la langue.

0
JW.