The first step to fixing a problem is admitting that there is one.
Bon, des critiques de PHP ce n’est pas ce qui manque mais pour une raison inconnue 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 reliably 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 country you live in if you don’t know the fine details of configuring PHP.- It’s not ok that you won’t be able can’t call array_map” or just “$iterator->reduce” on an iterator in 2014.
- It’s not ok to ignore the simple fact that most of the PHP world currently relies on parsing function and class comments for it’s code to function because people can’t get their shit together on mailing lists.
- It’s not ok to run around shouting “type hinting for literals would mean that passing an int to float hint would fatal PHP” and calling that an reasonable argument 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 parallel, using “promises” or whatever, in a language that has “pull stuff out of database and put it into the internet” as a proclaimed core competency.
- It’s not ok that
echo 0.000001;
produces1.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 generating a suppressed undefined 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’espère ». Alors pour ceux qui m’ont fait suivre le lien :
Pour le premier item il existe plusieurs solutions, dont un simple array_values($tab)[0]. Bref, rien d’exceptionnel pour aller itérer sur un dictionnaire.
Pour le second, si on demande explicitement au niveau du système à afficher les résultats suivant les conventions d’un pays spécifique, PHP s’y conforme. C’est le cas de la plupart des langages, y compris la ligne de commande de base. Difficile d’avancer que c’est un problème, d’autant qu’il est bien évidemment possible d’ignorer la configuration du système pour forcer une locale au niveau du langage.
Quant à savoir comment afficher 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écifique à PHP, à ma connaissance aucun ne le fait), il faut bien qu’il choisisse une forme arbitrairement à la sortie. Si l’auteur veut forcer autre chose, il a tous les outils pour ça.
Pour le dernier item j’ai la flemme de vérifier les cas limites mais à priori c’est juste que l’auteur n’a pas eu le courage d’aller créer un gestionnaire d’erreur 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éveloppeur frustré, 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 pousser des faux problèmes décrédibilise ceux qui essayent de corriger les problèmes réels.
Laisser un commentaire