Die Abstimmung über die Einführung von Union Types in PHP 8 endete vor Kurzem. Die Abstimmungsergebnisse zeigten, dass 61 Mitglieder des PHP-Entwicklungsteams dafür und 5 dagegen stimmten.
Es ist mir auch aufgefallen, dass Bruder Bird bei der Abstimmung dagegen gestimmt hat~
Den Abstimmungsergebnissen zufolge ist das so Offiziell bestätigt wurde, dass Union Types 2.0 in PHP 8 eingeführt wird.
Detaillierte Diskussion über Union-Typen kann auf GitHub eingesehen werden Werfen wir einen kurzen Blick auf Union-Typen.
Laut der offiziellen Einführung unterstützen Union Types den Empfang mehrerer Werte unterschiedlicher Typen, nicht nur eines einzelnen Typs. PHP unterstützt derzeit zwei spezielle Union-Typen:
·Type oder null, unter Verwendung der speziellen Type-Syntax
·Array oder Traversable, wodurch der spezielle iterierbare Typ entsteht
PHP unterstützt derzeit jedoch keine beliebigen Union-Typen. Wenn Sie es verwenden möchten, benötigen Sie die Hilfe von phpdoc-Kommentaren. Das Beispiel lautet wie folgt:
<pre style="margin: 0px; padding: 0px; font-family: "Courier New" !important; font-size: 14px; line-height: 1.5em; white-space: pre-wrap; overflow-wrap: break-word;">class Number { /** * @var int|float number; /** * @param int|float number) { number; } /** * @return int|float */ public function getNumber () { return $this->number; } }
Laut den Ergebnissen von Statistik ist die Verwendung von Union-Typen sehr verbreitet das Open-Source-Ökosystem und die PHP-eigene Standardbibliothek. Beamte sagen, wenn PHP Union-Typen unterstützen kann, können wir mehr Typinformationen von phpdoc in Funktionssignaturen migrieren, was die folgenden gemeinsamen Vorteile hat:
· Typen werden tatsächlich erzwungen, sodass Fehler frühzeitig erkannt werden können.
·Da sie obligatorisch sind, ist es weniger wahrscheinlich, dass Typinformationen veraltet sind oder Grenzfälle übersehen.
·Der Typ wird während des Vererbungsprozesses überprüft, um das Liskov-Substitutionsprinzip umzusetzen
· kann Typinformationen durch Reflexion erhalten.
·Die Syntax ist einfacher als bei phpdoc.
Union-Typen stellen nach Generika die größte „Lücke“ im aktuellen Typdeklarationssystem dar.
****Proposal****
Union-Typen verwenden die T1T2…-Syntax und können in allen akzeptierten Typen verwendet werden:
<pre style="margin: 0px; padding: 0px; font-family: "Courier New" !important; font-size: 14px; line-height: 1.5em; white-space: pre-wrap; overflow-wrap: break-word;">class Number { private int|float number): void { number; } public function getNumber (): int|float { return $this->number; } }
Unterstützte Typen
Union-Typen unterstützen alle derzeit von PHP unterstützten Typen: Nulltypen, nullbare Union-Typen, falsche Pseudotypen, wiederholte und redundante Typen.
****Typsyntax****
Mit Ausnahme des speziellen void-Typs kann die Typsyntax von PHP jetzt durch die folgende Syntax beschrieben werden:
<pre style="margin: 0px; padding: 0px; font-family: "Courier New" !important; font-size: 14px; line-height: 1.5em; white-space: pre-wrap; overflow-wrap: break-word;">type: simple_type | "?" simple_type | union_type ; union_type: simple_type "|" simple_type | union_type "|" simple_type ; simple_type: "false" # only legal in unions | "null" # only legal in unions | "bool" | "int" | "float" | "string" | "array" | "object" | "iterable" | "callable" # not legal in property types | "self" | "parent" | namespaced_name ;1 0
PHP Chinesisch Website, eine große Anzahl kostenloser PHP-Einführungs-Tutorials, willkommen zum Online-Lernen!