Le vote sur l'opportunité d'introduire les types d'union dans PHP 8 s'est terminé récemment. Les résultats du vote ont montré que 61 membres de l'équipe de développement PHP ont voté pour et 5 ont voté contre.
J'ai également remarqué que frère Bird a voté contre lors du vote~
Donc, d'après les résultats du vote, il a a été officiellement confirmé, Union Types 2.0 sera introduit dans PHP 8.
Une discussion détaillée sur les types d'unions peut être consultée sur GitHub Jetons un bref aperçu des types d'unions.
Selon l'introduction officielle, les types d'union prennent en charge la réception de plusieurs valeurs de types différents, pas seulement d'un seul type. PHP prend actuellement en charge deux types d'union spéciaux :
·Type ou null, en utilisant la syntaxe spéciale Type
·array ou Traversable, créant le type itérable spécial
Cependant, PHP ne prend actuellement pas en charge les types d'union arbitraires. Si vous souhaitez l'utiliser, vous avez besoin de l'aide des commentaires phpdoc. L'exemple est le suivant :
<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; } }
D'après les résultats des statistiques, l'utilisation de types d'union est très courante dans l'écosystème open source et la propre bibliothèque standard de PHP. Officiellement, si PHP peut prendre en charge les types d'union, cela nous permettra de migrer davantage d'informations de type de phpdoc vers les signatures de fonction, ce qui présente les avantages communs suivants :
· Les types sont en fait appliqués afin que les erreurs puissent être détectées tôt.
·Parce qu'elles sont obligatoires, les informations de type sont moins susceptibles de devenir obsolètes ou de manquer des cas extrêmes.
·Le type sera vérifié lors du processus d'héritage pour mettre en œuvre le principe de substitution de Liskov
· peut obtenir des informations de type par réflexion.
·La syntaxe est plus simple que celle de phpdoc.
Après les génériques, les types d'union peuvent être considérés comme la plus grande « lacune » dans le système actuel de déclaration de type.
****Proposition****
Les types d'union utilisent la syntaxe T1T2… et peuvent être utilisés dans tous les types acceptés :
<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; } }
Types pris en charge
Les types d'union prennent en charge tous les types actuellement pris en charge par PHP : types nuls, types d'union nullables, faux pseudo-types, types répétés et redondants.
****Syntaxe de type****
À l'exception du type spécial void, la syntaxe de type PHP peut désormais être décrite par la syntaxe suivante :
<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 ;
PHP chinois site Web , un grand nombre de tutoriels d'introduction PHP gratuits, bienvenue pour apprendre en ligne !