Maison > développement back-end > tutoriel php > Tapez la conduite en php

Tapez la conduite en php

Joseph Gordon-Levitt
Libérer: 2025-02-28 08:53:14
original
841 Les gens l'ont consulté

Type Hinting in PHP

Points clés

  • L'invite de type de PHP permet aux développeurs de spécifier le type de données de données attendu dans la déclaration de fonction, améliorant ainsi la robustesse et la lisibilité du code. Cependant, l'invite de type de PHP ne prend pas en charge les types de données scalaires, tels que des chaînes ou des entiers.
  • PHP est un langage faiblement dactylographié, ce qui signifie qu'il ne vous oblige pas à déclarer des types de données. L'ajout de types de type php scalaire dans PHP 5.4 a été controversé, et les adversaires pensent que cela est contraire à la conception de base de PHP. Bien que initialement soutenu, cette fonctionnalité n'entre pas dans le PHP 5.4 en raison des réponses communautaires.
  • Bien qu'il existe des limites dans les indices de type PHP, vous pouvez effectuer une vérification de base pour y parvenir lorsque le paramètre n'est pas un type scalaire. Dans ce cas, des fonctions telles que is_string() ou is_int() peuvent être utilisées pour augmenter une erreur ou lancer une exception.

En commençant par PHP 5, vous pouvez utiliser des invites de type pour spécifier le type de données de données attendues dans une déclaration de fonction. Lorsque vous appelez une fonction, PHP vérifie si le paramètre est du type spécifié. Sinon, le runtime augmentera une erreur et arrêtera l'exécution. Les types valides incluent le nom de classe de l'objet récepteur et le array du tableau de réception. Voici un exemple:

<?php
function enroll(Student $student, School $school) {
    echo "Enrolling " . $student->name . " in " . $school->name;
}
?>
Copier après la connexion

En disant à la méthode PHP enroll() quel type d'objet que vous vous attendez à recevoir, vous pouvez vous assurer que les élèves sont inscrits dans une école plutôt qu'un monastère ou un plan 401k. Encore une fois, vous savez qu'il n'y aura pas de pachydermes tenaces apparaissant le premier jour de la troisième année. Que se passe-t-il si j'essaie de m'inscrire auprès de Medicare?

<?php
$me = new Student("Amanda");
$medicare = new Program("Medicare");
$enroll = enroll($me, $medicare);
?>
Copier après la connexion

Bien que je sois étudiant, l'erreur suivante se produit:

<code>Catchable fatal error: Argument 2 passed to enroll() must be an instance of School, instance of Program given, called in typehint.php on line 32 and defined in typehint.php on line 6</code>
Copier après la connexion

Si <cod>null est utilisé comme valeur par défaut du paramètre, il sera également autorisé. Voici un exemple, cette fois en utilisant un tableau:

<?php
function startParty(array $guests, array $food = null) {
    // party stuff...
}
$guests = array("Susan Foreman", "Sarah Jane Smith", "Rose Tyler", "Donna Noble");
startParty($guests, null);
?>
Copier après la connexion

Tant qu'il y aura des invités, il y aura des fêtes, qu'il y ait ou non de la nourriture.

Limites des pointes de type

Toute classe définie peut être une invite de type valide, bien que PHP ne prenne pas en charge les invites de type pour les objets génériques. Qu'en est-il des autres situations? Voici un exemple spécial sur les limites des invites de type PHP:

<?php
function stringTest(string $string) {
    echo $string;
}
stringTest("definitely a string");
?>
Copier après la connexion
<code>Catchable fatal error: Argument 1 passed to stringTest() must be an instance of string, string given, called in typehint.php on line 42 and defined in typehint.php on line 39</code>
Copier après la connexion

Vous n'êtes pas le premier à penser "Qu'est-ce qui est fou? Je vous ai donné une instance de chaîne, mais vous vous plaignez que ce doit être une instance de chaîne!" C'est une chose commune. En fait, à première vue, cela peut être un message d'erreur plutôt déroutant. stringTest() ne recherche pas des chaînes, mais des instances de classes de chaînes. L'invite de type PHP ne prend pas en charge les types de données scalaires, telles que les chaînes ou les valeurs entières. Mais ça va! Si vous devez augmenter une erreur ou lancer une exception lorsque l'argument n'est pas un type scalaire (comme une chaîne ou un entier), vous pouvez effectuer une vérification de base à l'aide de fonctions telles que is_string() ou is_int() pour y parvenir.

guerre scalaire

Il existe certaines controverses dans l'ajout d'invites de type php scalaire à PHP 5.4. Les opposants au changement pensent que ce soutien violerait la conception de base de PHP. Le PHP est considéré comme une langue de type faible. Essentiellement, cela signifie que PHP ne vous oblige pas à déclarer le type de données. Les variables sont toujours associées au type de données auxquelles ils sont associés, mais vous pouvez faire quelque chose de radical, comme l'ajout de chaînes à des entiers sans causer d'erreurs. En mai 2010, une prise en charge des indices de type scalaire a été ajoutée à l'épine dorsale PHP. Mais en raison des réponses communautaires, cette fonctionnalité n'entrera pas sur la version 5.4.

Résumé

Les invites de type sont l'introduction de la technologie PHP pour la programmation orientée objet (en particulier pour identifier les types qui captent des exceptions). Je vous encourage à en savoir plus sur l'utilisation d'objets ici. Images de Carlos E. Santa Maria / Shutterstock

PHP Type Tips FAQ (FAQ)

Quelle est l'importance de l'invite de type PHP?

PHP 中的类型提示是一个重要特性,允许开发者在函数声明中指定参数的预期数据类型。 Il améliore la robustesse du code en s'assurant que la fonction reçoit le type correct de valeurs numériques. Il en résulte moins de bogues et de vulnérabilités dans le code, ce qui le rend plus fiable et plus facile à déboguer. Il améliore également la lisibilité du code, ce qui permet aux autres développeurs de comprendre plus facilement les fonctions du code.

Puis-je utiliser des invites de type pour tous les types de données en PHP?

PHP prend en charge les invites de type pour une variété de types de données, y compris des objets, des tableaux, des interfaces, des callables et des itérables. Cependant, il convient de noter que PHP ne prend pas en charge les invites de type scalaire (int, float, string et bool) jusqu'à la version 7.0. En commençant par PHP 7.0, vous pouvez utiliser des invites de type pour tous les types de données.

Que se passe-t-il si le type de données du paramètre passé ne correspond pas à l'invite de type?

PHP lancera une "erreur fatale" si le type de données du paramètre passé ne correspond pas à l'invite de type dans la déclaration de fonction. Cette erreur arrêtera l'exécution du script et empêchera tout traitement supplémentaire. C'est pourquoi vous devez vous assurer que le type de données correct est transmis à la fonction.

Comment le type PHP est-il invité à fonctionner avec l'héritage des classes?

Dans PHP, les invites de type peuvent être utilisées avec l'héritage de la classe. Si une fonction attend des paramètres d'un type de classe spécifique, il acceptera également les instances de sous-classes de cette classe. En effet, une sous-classe est un type spécifique de sa classe parent, satisfaisant ainsi l'indice de type.

Puis-je utiliser des invites de type dans les fonctions intégrées de PHP?

Non, l'invite de type en PHP ne peut être utilisée que pour les fonctions définies par l'utilisateur. Les invites de type ne sont pas prises en charge par les fonctions intégrées dans PHP. Cependant, ces fonctions ont souvent des mécanismes internes pour gérer différents types de données.

Quel est le modèle strict dans l'invite de type PHP?

Le mode strict dans les invites de type PHP est une caractéristique introduite dans PHP 7.0. Lorsque le mode strict est activé, PHP applique la correspondance exacte des types de données en fonction des invites de type. Si le type de données du paramètre passé ne correspond pas exactement à l'invite de type, PHP lancera une "erreur fatale" même si le paramètre peut être jeté au type correct.

Comment activer le mode strict en PHP?

pour activer le mode strict en PHP, vous devez déclarer declare(strict_types=1); en haut du fichier PHP. Cette déclaration doit être la première déclaration du script.

Quelle est la différence entre le mode faible et le mode strict dans les invites de type PHP?

La différence entre les modes faibles et stricts dans les invites de type PHP est de savoir comment PHP traite de la décalage du type. En mode faible, si possible, PHP tentera de lancer les paramètres passés au type de données correct. En revanche, en mode strict, PHP n'essaiera pas de lancer des valeurs, et une "erreur fatale" sera lancée si les types de données ne correspondent pas exactement.

Puis-je utiliser des invites de type pour les valeurs de retour de fonction?

Oui, en commençant par PHP 7.0, vous pouvez utiliser des invites de type pour les valeurs de retour de fonction. Cette fonctionnalité vous permet de spécifier le type de données attendu de la valeur de retour de la fonction, améliorant ainsi la fiabilité et la lisibilité de votre code.

Quelle est l'invite de type nullable en PHP?

L'invite de type nullable est une fonctionnalité introduite dans PHP 7.1. Il vous permet de spécifier le paramètre de fonction ou la valeur de retour peut être du type spécifié ou NULL. Pour rendre l'invite de type vide, préfixez le nom de type avec un point d'interrogation (?). Par exemple, "? String" signifie que la valeur peut être une chaîne ou un nul.

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!

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal