Certaines vulnérabilités de PHP se cachaient dans le moteur du langage depuis plus de dix ans. La cause de l’une d’elles avait même été identifiée dès 2024, sans être corrigée. Des chercheurs épaulés par l’intelligence artificielle ont finalement réussi à démontrer toute l’étendue du danger.
PHP, c’est un langage qui a 15 ans de retard sur tous ses concurrents et aurait dû mourir il y a 20 ans. Entre ça et JavaScript, les technos webs ne sont vraiment faites que d’accidents industriels.
Cela va précipiter le déclin de PHP et je verrais bien à moyen terme Wordpress être abandonné. Un CMS passoire qui nécessite d’être surveillé comme le lait sur le feu n’est pas de tout repos pour les utilisateurs comme pour les techniciens de maintenance.
… mais bien sûr… Paco Rabane avait prédit la chute de la station MIR sur tes pompes aussi !.. pourtant…
…ah, on sent le discours d’un expert là, un expert qui aurait mis à mort ce langage il y a 20 ans, qui est pourtant encore là aujourd’hui, massivement utilisé… Comparer PHP d’il y a 20 ans à ce qu’il est aujourd’hui… mouai, il y a peut-être un léger manque de discernement, mais bon, chaque pense ce qu’il veut hein !
Un site Wordpress avec le thème DIVI: score sur google speed insights: 35/100
Le même site refait avec Astro: score de 99/100.
Tous les développeurs de mes clients utilisent Rust et d’autres technos modernes, les applis avec du PHP sont bien trop lentes et ca ne m’intéresse pas d’héberger des VM de sites Wordpress où il y a de nouveaux risques de sécurité découverts tous les jours.
Ça fait plus de 15 ans que faire du PHP est mon métier principal, donc à défaut d’expert au moins senior confirmé. « Nianiania encore utilisé massivement aujourd’hui » ça s’appelle un sophisme de popularité et normalement quand on a plus de 14 ans on ne l’utilise pas.
Et tous les fanatiques de PHP passent leur temps à répéter que le PHP d’aujourd’hui n’a rien à voir avec celui d’il y a 20 ans, ben je suis désolé mais ses évolutions restent globalement marginales par rapport au boulot qu’il reste à abattre. PHP n’a toujours pas de génériques, pas de tableaux typés, pas de typage statique, la sécurité du code repose toujours quasi intégralement sur des outils d’analyse de code qui alourdissent sérieusement le workflow. Ses fonctions sur les tableaux et chaînes de caractères sont toujours monstrueuses, ne sont toujours pas constantes dans leur nommage ou ordre de déclaration des arguments, pas de surcharges de méthodes… La version 8.4 ajoute bien l’opérateur pipe qui va rendre les chaînage d’opérations moins hideuses, mais toujours à des milliers d’années lumières de l’élégance des langages bien conçus qui considèrent les primitives comme des objets ayant des méthodes pures.
Après je suis bien conscient que comme tous ceux qui défendent PHP bec et ongles, tu n’es sans doute qu’un junior voir un stagiaire et que tu n’as pas compris un tiers de ce que je viens de dire, mais avec du travail et surtout en travaillant avec des langages civilisés tu verras peut-être d’ici dix ans à quel point j’avais raison.
15 ans de PHP pour finir par confondre « je n’aime pas ce langage » avec « ce langage est mal conçu », c’est presque une performance. Quant à deviner le niveau de tes interlocuteurs sans les connaître, visiblement, le typage dynamique n’est pas le seul truc que tu maîtrises mal.
Un benchmark Divi vs Astro pour conclure que PHP est lent, c’est confondre une stack entière avec un langage. Rust ne rend pas une architecture bonne par magie, Astro n’est pas adapté à tous les besoins, et WordPress n’est pas une passoire par définition. Trois généralisations, zéro démonstration : à ce niveau, même un benchmark a besoin d’un benchmark.
On peut préférer d’autres langages, mais confondre ses préférences de conception avec des vérités absolues, tout en accumulant approximations et raccourcis techniques, ce n’est pas faire preuve d’exigence : c’est prendre ses préjugés pour de l’expertise et son mépris pour de l’argumentation.
Quand la condescendance dépasse la compétence, l’ignorance prend des airs d’expertise !
Enfin à ce niveau, le côté « mal conçu » de PHP, c’est quand même un fait largement admis depuis très longtemps (et perso, je le disait déjà dans un temps ancien où j’appréciai encore ce langage et était content quand mon employeur de l’époque me trouvait une mission en PHP, donc non, c’est pas une confusion avec « je n’aime pas ce langage »)…
C’est un langage qui a été conçu à la base par quelqu’un dont ce n’était pas du tout le domaine d’expertise, donc c’est parti sur des très mauvaises bases, avec une stdlib totalement incohérente.
Et même si depuis il y a heureusement aux commandes des gens qui savent un peu plus comment concevoir un langage, cette base incohérente continue à être traînée depuis des années, sans vraie actions pour la corriger, car ça casserait trop fortement la compatibilité… Et c’est comme ça qu’on se retrouve, même dans PHP 8.5, à toujours avoir une stdlib qui mélange allègrement les conventions de nommage, l’ordre des paramètres sur des fonctions sœurs (par exemple array_filter et array_map qui prennent pas leurs deux paramètres dans le même ordre…), ou encore qui fait des conversion automatiques de façon complètement stupide (du genre convertir en int quand tu compares deux strings et que par hasard il se trouve que les deux sont convertibles en int)… Les mauvaises langues diront d’ailleurs que c’est la raison pour laquelle PHP est l’un des rares, si ce n’est le seul, langage majeure pour lequel les utilisateurs peuvent commenter directement la doc, parce que c’est parfois tellement incohérent et imprévisible que ces commentaires sont indispensables ![]()
![]()
disons que c’est la spécialité de … certain (au singulier)
Ok, donc le fait que array_map et array_filter - au delà que la forme même du machin soit hideuse - par exemple ne prennent pas les arguments dans le même ordre (callback puis tableau dans le premier, tableau puis callback dans le second) ça n’est pas une erreur de conception d’après toi, c’est juste une question de « préférences » ?
Pas besoin de les connaître. Les seuls gens qui trouvent un intérêt au typage dynamique sont soit les grands débutants, soit les pseudo-seniors qui font exactement la même chose depuis plus de dix ans et ne se sont jamais formés correctement.
Personne de sérieux ne code de toute façon en PHP sans outil d’analyse statique, faisant reposer l’entièreté de la sécurité de leur code sur une béquille. Normalement, face à ce genre de constat, on réforme le langage et on le répare. Mais non, dans le cas de PHP on se dit « Houlalala attention, si on le fait trop évoluer on va casser des applications qui sont en prod depuis 25 ans »… Bah euh tant pis, si les devs ne tiennent pas leur code à jour c’est leur problème, et ils sont fortement confortés dans leur pratique par PHP qui encourage à travailler en mode yolo.
Vous dénoncez le sophisme de popularité, mais vous semblez avoir remplacé « c’est populaire, donc c’est bien » par « c’est moins élégant que mon langage préféré, donc c’est nul ».
La première affirmation est effectivement un sophisme. La seconde est une préférence technique présentée comme un verdict universel.
Et le coup du « tu es sûrement junior, tu comprendras dans dix ans » est particulièrement ironique : quand on manque d’arguments contre une objection, disqualifier l’interlocuteur en lui attribuant un niveau imaginaire permet d’éviter d’y répondre.
C’est fascinant de réclamer autant de rigueur dans la conception des langages tout en faisant preuve d’aussi peu de rigueur dans la construction d’un argument.
Vous avez peut-être raison sur plusieurs défauts de PHP. Mais avoir raison sur des défauts techniques ne rend pas automatiquement pertinent le reste de votre discours, et encore moins nécessaire le mépris dont vous l’enrobez.
Je n’ai pas « un langage préféré », il y a des langages qui sont élégants et d’autres qui ne le sont pas. Exemples de bons langages : C#, TypeScript, Kotlin, Java. Exemples de langages de merde : PHP, Python ou JavaScript sans superset TypeScript.
Exemples de deux codes qui font la même chose en PHP et en TypeScript :
// Php
$data = getDataFromApi();
$usersOver18 = array_values(array_filter(
array_map(
fn(array $row) => new User($row['name'], $row['age']),
$data
),
fn(User $user) => $user->age >= 18
));
// TypeScript
const usersOver18 = getDataFromApi()
.map(userData => new User(userData.name, userData.age))
.filter(user => user.age >= 18);
Y a quand-même un exemple qui est objectivement un million de fois plus conscis, clair, lisible et élégant que l’autre et je vois mal comment on peut défendre le contraire sauf à n’avoir jamais travaillé avec un vrai langage orienté objet. Sans même parler de tous les $ et autres caractères inutiles qui viennent polluer la frappe et rendent n’importe quel code deux fois plus long à tapper en PHP qu’en autre chose.
Bref, tout ce que je retiens est que vous n’avez aucun argument sur le fond et que vous avez donc décidé de vous attaquez à la forme. On appelle ça un argument du ton ou tone policing.