Dieser Artikel gibt Ihnen eine Zusammenfassung der Verwendung von Funktionstypdeklarationen in verschiedenen Versionen von PHP. Er ist sehr einfach und praktisch. Freunde in Not können sich darauf beziehen.
PHP7 beginnt, Skalartypdeklarationen zu unterstützen Stark typisierte Sprachen. Der Geschmack ist stärker. Bei der Verwendung dieser Funktion bin ich auf zwei Fallstricke gestoßen: einmal bei der Deklaration von boolean und zuletzt bei der Deklaration von double. Um in Zukunft ähnliche Fehler zu vermeiden, habe ich die offizielle Dokumentation einmal gelesen. Dieser Artikel ist eine Zusammenfassung der Verwendung von Typdeklarationen in PHP-Funktionen nach dem Lesen.
Syntaktisch hat die PHP-Funktionsdefinition mehrere Perioden durchlaufen:
Antike (PHP 4)
Es ist sehr einfach, eine Funktion zu definieren. deklariert mit der Syntax von Funktionsname(args) {body}. Parameter- und Rückgabewerttypen können nicht angegeben werden, und es gibt unendlich viele Möglichkeiten für Parameter- und Rückgabewerttypen. Dies ist bei weitem die gebräuchlichste Art, eine Funktion zu deklarieren.
Array- und Referenztyp-Parameterwertdeklaration (PHP 5)
Array, Klasse, Schnittstelle und Callable können in der Funktionsdeklaration verwendet werden. Ab 5.6 werden Konstanten (einschließlich Klassenkonstanten) als Standardparameter sowie Parameterarrays (mit vorangestellten Auslassungspunkten...) unterstützt. Beispiel:
function sum(...$numbers) { $sum = 0; foreach ($numbers as $number) { $sum += $number; } return $sum; }
Hinweis: Wenn der Wert des Parameters null sein kann, muss null der Standardwert des Parameters sein, andernfalls tritt ein Fehler auf Berufung. Zum Beispiel:
function foo(array $arr = null) { ... }
Skalare Typ- und Rückgabewertdeklaration (PHP 7)
Funktionen unterstützen offiziell Skalartypen ( int, bool, float usw.) und die Deklaration des Rückgabewerttyps (der deklarierte Typ ist derselbe wie der Parameter). Ab dieser Version fühlt sich das Schreiben von PHP an wie das Schreiben von Java.
Wenn der Rückgabewert der Funktion möglicherweise null ist, kann der Rückgabewerttyp leider nicht angegeben werden. Zum Beispiel:
function getModel() : Foo { if ($this->_model === null) { $this->_model = xxxx; // get from db or otherelse } return $this->_model; // 如果$this->_model仍是null,运行出错 }
Parameter und Rückgabewerte können sowohl null als auch void-Rückgabetypdeklaration sein (PHP 7.1)
When-Parameter und Rückgabewerttypen haben Wenn es null sein kann, ändern Sie den Typ mit einem Fragezeichen (?), um das Problem des Nullwerts zu lösen (es steht nicht in Konflikt mit den Standardparametern und unterstützt auch die Typdeklaration). Rückgabewerte vom Typ „void“. Zum Beispiel:
function getModel(?int $id) : ?Foo { if ($id !== null) { $this->_model = xxxx; } else { $this->_model = yyyy; } return $this->_model; } // 调用 $foo->getModel(null); $foo->getModel(100); // 函数声明了参数并且没有提供默认参数,调用时不传入参数会引发错误 // 将函数声明改成 getModel(?int $id = 100) {},可以不传参数 $foo->getModel();
Wenn der Rückgabewert der Funktion ungültig ist, kann im Funktionskörper keinem Typ eine Rückgabe folgen oder es wird keine Rückgabeanweisung angezeigt.
function test(array $arr) : void { if (!count($arr) { return; } array_walk($arr, function ($elem) {xxxx}); }
Nachdem wir den obigen Verlauf überprüft haben, können wir sehen, dass die Funktionstypdeklaration mit PHP 7.1 sehr vollständig war (obwohl sie in der Praxis nicht oft verwendet wird). .
Lassen Sie uns über die Fallstricke in der Praxis sprechen. Die verfügbaren Typen für die Parameter- und Rückgabewerttypdeklaration sind:
Class/Interface
self, das nur für seine eigenen Methoden verwendet werden kann
Array
bool
aufrufbar
int
float
string
iterable
Beachten Sie, dass die Liste keine booleschen und doppelten Typen enthält! Sofern Sie diese beiden Typen nicht definieren, ist es falsch, sie in Parametern und Rückgabewerten zu verwenden!
Hier ist PHP auch etwas schmerzhaft. Die beiden Schlüsselwörter double und float sind im normalen Gebrauch nahezu identisch. Doubleval ist beispielsweise ein Alias von floatval, is_double ist ein Alias von is_float und (double) und (float) haben bei der Konvertierung die gleiche Wirkung. Aber es funktioniert nicht, wenn es um Typdeklarationen geht. Die gleiche Situation tritt bei bool und boolean auf.
Zusammenfassung
Derzeit ist die stabile Version von PHP 7.2 veröffentlicht. Es wird empfohlen, in neuen Projekten so oft wie möglich PHP 7.1 und nachfolgende Versionen zu verwenden. Um klaren und wartbaren Code zu schreiben, werden deklarative Typen empfohlen. Es wird empfohlen, Nullwerte nur für Referenztypen oder Zeichenfolgen zu verwenden und Nullwerte nicht für Skalartypparameter wie int/float zu verwenden. Versuchen Sie, func_get_argc und andere Funktionen nicht zu verwenden, es sei denn, dies ist erforderlich.
Erklärung, wie die Anzahl der Vorkommen einer Zahl in einem sortierten Array in PHP gezählt wird
PHP ruft ffmpeg auf, um Video-Screenshots zu erstellen und das Skript zu verbinden
Detaillierte Erläuterung der Szenarien und Verifizierungsregeln in Yii2
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Typdeklaration von Funktionen in verschiedenen PHP-Versionen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!