Bon, ça fait 2 fois que je vais pour poster et que Chromium crashe et perd le post.
Je fais court du coup.
Le problème de PHP, c'est que il respire l'amateurisme. Il y a même des putains d'easter eggs qu'il met automatiquement sur tes sites. Quel autre langage fait ça sérieux ?
Démonstration:
http://www.websitebakery.com/?=PHPE9568F36-D428-11d2-A769-00AA001ACF42Ce site utilise PHP 5.2. Tu le sais parce que en plus l'image change à chaque release.
Merde quoi. Et tu ne peux pas le désactiver. Le seul et unique moyen de virer ça, c'est de
patcher le source et recompiler ton moteur PHP à la main. Vous êtes sérieux ?
Mais même pour revenir à ma petite liste là haut. C'est juste la liste des problèmes que j'ai eu moi, personnellement. On peut trouver des listes longues comme le bras, qui font bien 10x la taille de toute ce que tu trouveras pour n'importe quel autre langage.
Et puis des trucs basiques quoi merde. Je sais qu'on peut s'habituer à tout, mais ça n'en fait pas un bon design.
La comparaison non transitive ? Sérieux, c'est la base. Si A=B et B=C, alors A=C. Ben non, pas en PHP.
L'impossibilité de comparer de manière prévisible deux variables ?
Le fait que des fonctions se comportent différemment
en fonction de l'endroit d'où tu les appelles. Si ça c'est pas tordu, je vois pas quoi.
echo(intval(9999999999)) => affiche "2147483647". Ne génère aucun warning, tout va bien.
Juste regarde moi ça
http://php.net/manual/en/array.sorting.php Dis moi si honnêtement c'est pas complètement foireux. Lis les commentaires aussi, c'est très drôle. Et même dans la doc des fonctions de tri c'est écrit
« Be careful when sorting arrays with mixed types values because sort() can produce unpredictable results ». NON ! NON ! NON !
Mais chaque page de la doc tu retrouves le même genre de trucs, et chaque page de la doc, tu trouves une liste de commentaire détaillant comment contourner les bugs et les incohérences de la fonction.
Regarde ça, trouvé dans un commentaire expliquant comment contourner les incohérences de l'opérateur < :
function compare($a, $b) {
if (is_object($a) || is_object($b) {
if ($a == $b) { return 0; }
} else {
if (is_string($a) && is_string($b) {
$a = 'x' . $a;
$b = 'x' . $b;
}
if ($a === $b) { return 0; }
}
if (is_null($a)) {
return -1;
}
if (is_null($b) {
return +1;
}
return $a < $b ? +1 : -1;
}Et encore, les commentaires suivant lui indiquent qu'il y a des cas qui ne sont toujours pas bien gérés par sa fonction. C'est juste indémerdable comme truc. Pour une simple comparaison.
Sur des langages comme JS il y a plein de merdes, mais l'usage de JSlint permet quand même de s'assurer que tu tombes pas trop dessus. Le truc avec PHP, c'est que tu es obligé de tomber dessus. L'équivalent, un PHPlint, ne pourrait pas lever une erreur à chaque fois que tu fais un ==, un ===, un < ou un >. Enfin il pourrait, mais comme tu peux pas faire autrement...