Maison > Article > développement back-end > Nouvelles fonctionnalités de PHP7.2 (déclaration de type de paramètre)
PHP 7.2 a été officiellement publié avec de nouvelles fonctionnalités, fonctionnalités et améliorations qui nous permettent d'écrire un meilleur code. Dans cet article, je présenterai certaines des fonctionnalités de langage les plus intéressantes de PHP 7.2 : les déclarations de types de paramètres.
Recommandé : "Tutoriel PHP7"
Déclaration du type de paramètre
À partir de PHP 5, nous pouvons déclarer la fonction dans Spécifie le type de paramètres qui doivent être transmis. Si la valeur donnée est d’un type incorrect, PHP générera une erreur. Une déclaration de type de paramètre (également appelée indice de type) spécifie le type de variables censées être transmises à une fonction ou à une méthode de classe.
Voici un exemple :
class MyClass { public $var = 'Hello World'; } $myclass = new MyClass; function test(MyClass $myclass){ return $myclass->var; } echo test($myclass);
Dans ce code, la fonction de test nécessite une instance de MyClass. Des types de données incorrects entraînent l'erreur fatale suivante :
Fatal error: Uncaught TypeError: Argument 1 passed to test() must be an instance of MyClass, string given, called in /app/index.php on line 12 and defined in /app/index.php:8
Depuis PHP 7.2, les indices de type peuvent être utilisés avec les types de données d'objet, et cette amélioration permet de déclarer des objets génériques en tant que paramètres de fonctions ou de méthodes. Voici un exemple :
class MyClass { public $var = ''; } class FirstChild extends MyClass { public $var = 'My name is Jim'; } class SecondChild extends MyClass { public $var = 'My name is John'; } $firstchild = new FirstChild; $secondchild = new SecondChild; function test(object $arg) { return $arg->var; } echo test($firstchild); echo test($secondchild);
Dans cet exemple, nous appelons la fonction test deux fois, en passant un objet différent à chaque appel. Cela n'était pas possible dans les versions précédentes de PHP.
Déclaration du type de retour d'objet
Si la déclaration du type de paramètre spécifie les types attendus des paramètres de la fonction, la déclaration du type de retour spécifie le type attendu de la valeur de retour.
La déclaration du type de retour spécifie le type de variable que la fonction est censée renvoyer.
À partir de PHP 7.2, nous sommes autorisés à utiliser des déclarations de type de retour pour les types de données d'objet. Voici un exemple :
class MyClass { public $var = 'Hello World'; } $myclass = new MyClass; function test(MyClass $arg) : object { return $arg; } echo test($myclass)->var;
Les versions précédentes de PHP entraîneraient l'erreur fatale suivante :
Fatal error: Uncaught TypeError: Return value of test() must be an instance of object, instance of MyClass returned in /app/index.php:10
Bien sûr, en PHP 7.2, ce code répondra par 'Hello World'.
Déclaration de grâce des types de paramètres
PHP n'autorise actuellement aucune différence dans les types de paramètres entre les sous-classes et leurs classes ou interfaces parentes. Qu'est-ce que cela signifie?
Considérez le code suivant :
<?php class MyClass { public function myFunction(array $myarray) { /* ... */ } } class MyChildClass extends MyClass { public function myFunction($myarray) { /* ... */ } }
Ici, nous avons omis les types de paramètres dans la sous-classe. En PHP 7.0, ce code produit l'avertissement suivant :
Warning: Declaration of MyChildClass::myFunction($myarray) should be compatible with MyClass::myFunction(array $myarray) in %s on line 8
Depuis PHP 7.2, nous sommes autorisés à omettre les types dans les sous-classes sans casser aucun code. Cette suggestion nous permettra de mettre à niveau les classes pour utiliser les indices de type dans la bibliothèque sans avoir à mettre à jour toutes les sous-classes.
Virgule de fin dans la syntaxe de la liste
La virgule de fin après le dernier élément du tableau est une syntaxe valide en PHP, parfois pour ajouter facilement de nouveaux éléments et éviter l'analyse en raison d'une virgule manquante. erreurs, son utilisation est encouragée. Depuis PHP 7.2, nous sommes autorisés à utiliser des virgules de fin pour regrouper les espaces de noms.
Voir les virgules de fin dans la syntaxe de liste pour un examen plus approfondi de cette RFC et quelques exemples de 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!