Ich habe einige PHP-Funktionen durchgearbeitet und konnte nicht umhin, Folgendes zu bemerken:
<?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)
?>
Beachten Sie die array_key_exists()
und property_exists()
Funktion. Im ersten Fall ist der Eigenschaftsname (Schlüssel für ein Array) der erste Parameter, im zweiten Fall der zweite Parameter. Intuitionell würde man erwarten, dass sie eine ähnliche Signatur haben. Dies kann zu Verwirrung führen und die Entwicklungszeit kann durch Korrekturen dieses Typs verschwendet werden.
Sollte PHP oder eine andere Sprache nicht in Betracht ziehen, die Signaturen verwandter Funktionen konsistent zu machen?
Antworten:
Sie schlagen vor, im Wesentlichen die Signaturen für viele vorhandene Funktionen zu ändern. Überlegen Sie sich eine Minute, welche Auswirkungen dies auf den vorhandenen Code haben würde. Nehmen wir nun an, die PHP-Gruppe hat die PHP-Version N veröffentlicht, die die Signaturen von 30% der Funktionen ändert. Stellen Sie sich nun vor, Sie müssen Code schreiben, der sowohl auf PHP vN als auch auf PHP v. {N-1} läuft - wie viel Spaß würde das machen?
Stellen Sie sich vor, Sie sind Hoster oder Manager eines korporativen Rechenzentrums. Welchen Anreiz hätten Sie, PHP vN zu unterstützen, vorausgesetzt, dass nach dem Umstieg der gesamte Code kaputt ist und die Benutzer mit Heugabeln und Fackeln in Ihr Büro kommen?
quelle
Weil PHP die Sprache ohne jegliche Spezifikation ist.
Und buchstäblich jeder konnte ein paar Funktionen hinzufügen, und von Konsistenz war am Anfang keine Rede. SO, die Sauerei.
quelle
Die meisten guten Sprachen sind und sind bestrebt, konsistent zu sein.
Es ist nur die Realität des Zustands von PHP. Wie StasM bereits sagte, wäre es ein Albtraum, solche Dinge nachträglich zu versuchen. Es würde sich auf zu viel vorhandenen Code auswirken. Oft missbilligt PHP einfach Funktionen und erstellt neuere, bessere Funktionen, die konsistenter sind, aber viel Zeit in Anspruch nehmen können.
Ich denke, erfolgreiche PHP-Programmierer erinnern sich entweder an die jeweilige Syntax oder verwenden eine Software, die ihnen die Syntax automatisch mitteilt.
quelle
foo(a,b)
jetzt sein sollte,foo(b,a)
weil jemand die Signatur von foo geändert hat.$array->key_exists('whatever')
, meh :-)Die Hauptursache für Inkonsistenzen ist, dass viele (die meisten?) Der PHP-Funktionen wirklich Wrapper um eine C-Bibliothek sind. Die anfängliche Überlegung lautete: "Ich binde die C-Funktion xxxx ein, daher sollte die Parameterreihenfolge gleich bleiben." Wenn es darum ging, eine "pure php" -Funktion zu schreiben, wurde dieses Denken auf "xxxx takes file and options" erweitert. Die neue Funktion verwendet einen Dateinamen und Optionen, so dass es sinnvoll ist, dass JJJJ dieselben Parameter in derselben Reihenfolge verwendet.
Der große Nachteil hierbei ist, dass die zugrunde liegenden C-Bibliotheken anfangs sehr inkonsistent waren.
quelle
Der (a?) Grund war, mit früheren PHP-Versionen kompatibel zu bleiben. Anstatt Funktionsnamen zu ändern, die viele Anwendungen beschädigen würden, bleiben die Funktionen erhalten. Intuitionell sollte jedoch eine konsistente Funktionsbenennung für neue Sprachen berücksichtigt werden.
Ich muss Ihnen widersprechen, dass Entwicklungszeit verschwendet wird. Das Erlernen von PHP kann länger dauern, um die Benennung bestimmter Funktionen zu verstehen, aber sobald es beherrscht ist (oder zumindest gewusst hat), ist es kein Problem mehr.
Kompatibilität> Konsistenz (zumindest zu PHP)
quelle