Et si PHP était audité demain afin d'en évaluer le niveau de qualité ? Il n'est pas certain que le bilan serait satisfaisant, tant la nomenclature de nommage des fonctions, voir carrément les prototypes d'appels, sont déroutants. Rapide état des lieux d'un capharnaüm.

String haystack et string needle ?

La fonction strstr() trouve la première occurrence d’une chaîne dans une autre. Son prototype d’appel est : string strstr ( string haystack, string needle )

Par contre, la fonction str_replace() qui permet de remplacer toutes les occurrences dans une chaîne utilise le prototype d’appel suivant : mixed str_replace ( mixed search, mixed replace, mixed subject [, int &count] )

Pour des raisons de cohérence, on se demande pourquoi le premier argument n’est pas la chaîne sur laquelle on désire appliquer les remplacements, le second étant la chaîne dont on recherche l’occurrence, le troisième la chaîne de remplacement, etc. Bref, on le voit ici, la chaîne correspondant à l’occurrence cherchée se trouve alternativement en dernier et en premier argument.

Underscore ou non ?

Toujours en se basant sur les deux fonctions précédentes, il est étonnant de noter que certaines fonctions comportent des underscores (str_replace(), str_repeat(), str_shuffle(), etc.) et d’autres non (strlen(), strpos(), strtolower(), etc.). D’autres exemples sont encore plus flagrants. Par exemple, la fonction stripslashes() qui a pour but de supprimer les anti-slash d’une chaîne et la fonction strip_tags() qui a pour but de supprimer les balises HTML et PHP d’une chaîne. Pourquoi un underscore pour l’une et non pour l’autre ? Même chose pour la fonction base64_decode() (et sa fonction connexe base64_encode()) et urldecode() (et sa fonction connexe urlencode()).

Singulier ou pluriel ?

Lire la suite