Maison > développement back-end > PHP8 > Utilisez les types Union pour combler le problème des types d'acquisition manquants dans PHP8

Utilisez les types Union pour combler le problème des types d'acquisition manquants dans PHP8

WBOY
Libérer: 2023-06-21 10:04:39
original
1399 Les gens l'ont consulté

À mesure que PHP continue de se développer, les fonctionnalités du langage sont constamment améliorées. Dans la version PHP8, une nouvelle fonctionnalité a été introduite : les types d'union. Les types d'union ajoutent des restrictions de type aux variables, paramètres, valeurs de retour, etc., ce qui peut résoudre le problème des types manquants dans le code. Cet article présentera les idées principales et l'utilisation des types Union.

Quels sont les types d'Union ?

En PHP, nous devons souvent imposer des restrictions de type sur les variables pour garantir l'exactitude et la fiabilité du programme. Les types d’unions nous offrent une nouvelle façon de répondre à cette exigence.

Regardons d'abord un exemple. Supposons que nous ayons une fonction qui doit accepter deux paramètres, un de type int et un de type string :

function concatenate($a, $b) {
  return $a . $b;
}
Copier après la connexion

Maintenant, nous appelons cette fonction et transmettons deux paramètres :

concatenate(1, '2');
Copier après la connexion
# 🎜 🎜#Quel est le résultat ? La réponse est : « 12 ». Ce code fonctionne bien, mais nous avons du mal à confirmer son exactitude. Parce que nous n'avons aucune restriction sur les types de paramètres de fonction, c'est-à-dire que $a et $b peuvent être de n'importe quel type.

Nous pouvons utiliser des indices de type pour augmenter les restrictions de type :

function concatenate(int $a, string $b) {
  return $a . $b;
}
Copier après la connexion

De cette façon, si nous transmettons des paramètres de type non-int, des erreurs seront trouvées lors de la phase de compilation. Cependant, il y a un problème avec cela : que se passe-t-il si nous voulons passer un paramètre, qui peut être de type int ou string ? Vous pouvez l'implémenter comme ceci :

function concatenate($a, $b) {
  if (is_int($a) && is_string($b)) {
    return $a . $b;
  } elseif (is_string($a) && is_int($b)) {
    return $b . $a;
  } else {
    throw new Exception('Invalid arguments');
  }
}
Copier après la connexion

Cette façon d'écrire est très lourde et la lisibilité du code est également très mauvaise.

En PHP8, nous pouvons utiliser les types Union pour résoudre ce problème :

function concatenate(int|string $a, int|string $b) {
  return $a . $b;
}
Copier après la connexion

Cette fonction peut accepter deux paramètres, ils peuvent être de type int ou de type string, c'est-à-dire également disons, tant que le type du paramètre est int ou string, cette fonction peut être appelée normalement.

Usage

Les types Union peuvent être utilisés dans les paramètres, les valeurs de retour, les attributs de classe, etc. Ci-dessous, nous présentons chaque utilisation séparément.

Parameters

Les types Union peuvent être utilisés dans les paramètres de fonction. De cette façon, nous pouvons limiter plusieurs types de paramètres. Utilisez simplement le symbole | pour connecter différents types. Par exemple :

function foo(int|float $x, string $y) {
  // ...
}
Copier après la connexion

La fonction ci-dessus accepte deux paramètres, $x peut être de type int ou float, et $y doit être de type chaîne.

Valeur de retour

De même, on peut également utiliser des types Union à la valeur de retour de la fonction :

function bar(int $x): int|string {
  if ($x > 0) {
    return $x * 2;
  } else {
    return 'error';
  }
}
Copier après la connexion

Cette fonction accepte un paramètre de type int $x, la valeur de retour peut être de type entier ou chaîne. Si $x est supérieur à 0, renvoyez 2 fois $x ; sinon renvoyez la chaîne « erreur ».

Attribut de classe

Les types d'union peuvent également être utilisés lors de la définition des attributs de classe :

class MyClass {
  public int|string $x;
}
Copier après la connexion
Dans cet exemple, MyClass a un attribut $x , son le type peut être de type int ou chaîne.

Notes

Bien que les types Union nous offrent une nouvelle façon d'appliquer des restrictions de type, nous devons toujours prêter attention à certaines choses.

Tout d'abord, utilisez le moins possible les types Union. Des restrictions de type excessives réduiront la lisibilité du code et augmenteront la difficulté de la maintenance. Choisir les types appropriés pour limiter les paramètres et les valeurs de retour peut rendre votre code plus concis, plus clair et plus facile à maintenir.

Deuxièmement, lors de l'utilisation de types Union, les conversions de caractères doivent être évitées autant que possible. Parce que cela entraînera des problèmes de sécurité de type.

Enfin, les types Union ne sont pas une solution parfaite. Pour le jugement de type, dans certains cas, nous devons toujours utiliser des instructions if pour porter des jugements.

Conclusion

Les types Union nous offrent une toute nouvelle façon d'effectuer des restrictions de type. En utilisant les types Union dans les paramètres, les valeurs de retour et les attributs de classe, nous pouvons contrôler plus étroitement la sécurité des types de notre code, améliorant ainsi la fiabilité et la maintenabilité de nos programmes. Cependant, lors de l'utilisation des types Union, nous devons toujours prêter attention à des problèmes tels que la lisibilité du code et la sécurité des types. Ce n'est qu'en choisissant les types appropriés pour les restrictions que nous pouvons garantir la stabilité et la robustesse du code.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal