Please stop preten­ding PHP is a good language


The first step to fixing a problem is admit­ting that there is one.

Bon, des critiques de PHP ce n’est pas ce qui manque mais pour une raison incon­nue je m’étais dit que ça partait bien quand j’ai lu la première ligne. Sauf qu’au final

  • It’s not ok that you can’t relia­bly get the first element of an array using less than 4 lines of code without causing side effects.*[1]
  • It’s not ok that the output of echo 5/3 might depend on the coun­try you live in if you don’t know the fine details of confi­gu­ring PHP.
  • It’s not ok that you won’t be able can’t call array_map” or just “$itera­tor->reduce” on an itera­tor in 2014.
  • It’s not ok to ignore the simple fact that most of the PHP world currently relies on parsing func­tion and class comments for it’s code to func­tion because people can’t get their shit toge­ther on mailing lists.
  • It’s not ok to run around shou­ting “type hinting for lite­rals would mean that passing an int to float hint would fatal PHP” and calling that an reaso­nable argu­ment while people just write $x = (float)$x; in the cases where it actually does matter anyways.
  • It’s not ok to be not able to talk to 2 back end data sources in paral­lel, using “promises” or whate­ver, in a language that has “pull stuff out of data­base and put it into the inter­net” as a proclai­med core compe­tency.
  • It’s not ok that echo 0.000001; produces 1.0E-6 and that casting it to string doesn’t help but putting quotes around it does.
  • It’s not ok that you have to clear the error buffer by gene­ra­ting a suppres­sed unde­fi­ned variable error just to be able to sanely use token_get_all().

Au final la moitié des items ressemblent juste à « ça ne fait pas ce que j’es­père ». Alors pour ceux qui m’ont fait suivre le lien :

Pour le premier item il existe plusieurs solu­tions, dont un simple array_values($tab)[0]. Bref, rien d’ex­cep­tion­nel pour aller itérer sur un diction­naire.

Pour le second, si on demande expli­ci­te­ment au niveau du système à affi­cher les résul­tats suivant les conven­tions d’un pays spéci­fique, PHP s’y conforme. C’est le cas de la plupart des langages, y compris la ligne de commande de base. Diffi­cile d’avan­cer que c’est un problème, d’au­tant qu’il est bien évidem­ment possible d’igno­rer la confi­gu­ra­tion du système pour forcer une locale au niveau du langage.

Quant à savoir comment affi­cher 0.000001 ou 1E-6, comme le langage n’a aucun moyen de savoir comment a été tapé la valeur initiale dans le code source (rien de spéci­fique à PHP, à ma connais­sance aucun ne le fait), il faut bien qu’il choi­sisse une forme arbi­trai­re­ment à la sortie. Si l’au­teur veut forcer autre chose, il a tous les outils pour ça.

Pour le dernier item j’ai la flemme de véri­fier les cas limites mais à priori c’est juste que l’au­teur n’a pas eu le courage d’al­ler créer un gestion­naire d’er­reur pour gérer ses erreurs.

Bref, tout ça c’est bien joli mais à première vue une bonne partie n’est qu’un problème de déve­lop­peur frus­tré, pas un problème de langage.

Ce qui me frustre moi c’est que des problèmes de langages il y en a plein, et que pous­ser des faux problèmes décré­di­bi­lise ceux qui essayent de corri­ger les problèmes réels.


Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.