Detaillierte Erläuterung der Typdeklaration von Funktionen in verschiedenen PHP-Versionen

jacklove
Freigeben: 2023-04-02 08:14:01
Original
1615 Leute haben es durchsucht

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;
}
Nach dem Login kopieren

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) {
  ...
}
Nach dem Login kopieren

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,运行出错
}
Nach dem Login kopieren

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();
Nach dem Login kopieren

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});
}
Nach dem Login kopieren

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:

  1. Class/Interface

  2. self, das nur für seine eigenen Methoden verwendet werden kann

  3. Array

  4. bool

  5. aufrufbar

  6. int

  7. float

  8. string

  9. 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.

Artikel, die Sie interessieren könnten:

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage