Je parcourais certaines fonctions PHP et je n'ai pas pu m'empêcher de remarquer ce qui suit:
<?php
function foo(&$var) { }
foo($a); // $a is "created" and assigned to null
$b = array();
foo($b['b']);
var_dump(array_key_exists('b', $b)); // bool(true)
$c = new StdClass;
foo($c->d);
var_dump(property_exists($c, 'd')); // bool(true)
?>
Remarquez la fonction array_key_exists()
et property_exists()
. Dans le premier, le nom de la propriété (clé d'un tableau) est le premier paramètre tandis que dans le second, c'est le deuxième paramètre. Par intuition, on pourrait s'attendre à ce qu'ils aient une signature similaire. Cela peut prêter à confusion et le temps de développement peut être perdu en faisant des corrections de ce type.
PHP, ou tout autre langage d'ailleurs, ne devrait-il pas envisager de rendre cohérentes les signatures des fonctions associées?
Réponses:
Ce que vous proposez consiste essentiellement à modifier les signatures pour de nombreuses fonctions existantes. Réfléchissez un instant à l'effet que cela aurait sur le code existant. Supposons maintenant que le groupe PHP ait publié la version N de PHP qui change les signatures de 30% des fonctions. Imaginez maintenant que vous devez écrire du code qui s'exécute à la fois sur PHP vN et PHP v. {N-1} - à quel point cela serait-il amusant?
Imaginez maintenant que vous êtes un hébergeur ou un gestionnaire de centre de données corporatif - quelle incitation auriez-vous à prendre en charge PHP vN, à condition qu'une fois que vous basculez, tout le code soit cassé et les utilisateurs viennent à votre bureau avec des fourches et des torches?
la source
Parce que PHP est le langage sans spécification.
Et littéralement, tout le monde pouvait ajouter quelques fonctions, et il n'était pas question de cohérence au début. Donc, le désordre.
la source
La plupart des bonnes langues sont et s'efforcent d'être cohérentes.
C'est juste la réalité de l'état de PHP. Comme l'a mentionné StasM, ce serait un cauchemar d'essayer de changer des choses comme ça après coup. Cela affecterait trop de code existant. Souvent, PHP déprécie simplement les fonctions et crée de meilleures fonctions plus récentes et plus cohérentes, mais cela peut prendre beaucoup de temps.
Je pense que les programmeurs PHP qui réussissent se souviennent de la syntaxe particulière ou utilisent un logiciel qui leur indique automatiquement la syntaxe.
la source
foo(a,b)
devrait maintenant l'êtrefoo(b,a)
parce que quelqu'un a changé la signature de foo.$array->key_exists('whatever')
mais, meh :-)La principale source d'incohérence est que beaucoup (la plupart?) Du php dans les fonctions intégrées sont vraiment des wrappers autour d'une bibliothèque C. La pensée initiale était "J'encapsule la fonction C xxxx donc je devrais garder l'ordre des paramètres le même". Quand il s'agissait d'écrire une fonction "php pur", cette réflexion a été étendue à "xxxx prend le fichier et les options, la nouvelle fonction prend un nom de fichier et des options, il est donc logique que yyyy prenne les mêmes paramètres dans le même ordre.
Le gros défaut ici est que les bibliothèques C sous-jacentes étaient très incohérentes au départ.
la source
La raison (a?) Était de rester compatible avec les versions précédentes de PHP. Au lieu de changer les noms de fonctions qui briseraient de nombreuses applications, les fonctions restent. Cependant, par intuition, oui, la dénomination de fonction cohérente doit être prise en compte pour les nouveaux langages.
Je dois être en désaccord avec vous sur le fait que le temps de développement est perdu. L'apprentissage de PHP peut prendre plus de temps pour comprendre le nommage de certaines fonctions, mais une fois maîtrisé (ou du moins conscient), cela devient un problème.
Compatibilité> Cohérence (au moins pour PHP)
la source