La fonction is_a () dans PHP est utilisée pour déterminer si un objet appartient à une certaine classe, ou est une instance d'une sous-classe de cette classe. Son utilisation de base est la suivante:
is_a(object $object, string $class_name, bool $allow_string = false): bool
À partir de PHP 5.3.0, IS_A () ajoute le troisième paramètre $ allow_string . Ce paramètre détermine si la fonction considère le premier paramètre transmis en tant que chaîne et le juge.
Avant PHP 5.3+, IS_A () ne pouvait accepter que les objets comme le premier paramètre, et un avertissement ou une erreur serait déclenché si une chaîne (nom de classe) a été transmise. PHP 5.3+ introduit un troisième paramètre, nous permettant de passer dynamiquement si une classe a eu des chaînes de classe d'une autre classe sans instantiation.
Par exemple:
<?php
class ParentClass {}
class ChildClass extends ParentClass {}
echo is_a(new ChildClass(), 'ParentClass'); // Sortir:1(true)
echo is_a('ChildClass', 'ParentClass'); // avertir,PHP 5.3+ Pas pris en charge avant
echo is_a('ChildClass', 'ParentClass', true); // Sortir:1(true)
?>
Ici, le troisième paramètre est défini sur TRUE pour permettre au premier paramètre de passer dans la chaîne de «classe enfant» et de déterminer correctement si la classe est une sous-classe de «parentClass» .
Évitez instancier des objets <br> Dans certains scénarios, nous ne voulons pas instancier des objets, nous voulons juste juger de la relation successive d'une certaine classe. En autorisant les chaînes entrantes, la consommation de ressources inutile peut être évitée.
Code plus flexible <br> Permet au jugement dynamique des noms de classe de rendre le code plus universel, en particulier en mode injection et en mode d'usine, les classes sont souvent traitées sous la forme de chaînes de nom de classe.
Compatibilité et clarté <br> Définissez le troisième paramètre sur TRUE OF Affichage, et le code est destiné à être clair pour éviter les erreurs potentielles causées par le comportement par défaut.
<?php
class Animal {}
class Dog extends Animal {}
// Jugement d'objet
$dog = new Dog();
if (is_a($dog, 'Animal')) {
echo "Dog Oui Animal Sous-classes de\n";
}
// Jugement de corde,PHP 5.3+ Recommandé de passer true
if (is_a('Dog', 'Animal', true)) {
echo "Chaîne 'Dog' 代表的类Oui Animal Sous-classes de\n";
}
?>
La version PHP 5.3 a ajouté le troisième paramètre $ allow_string de la fonction is_a () , et la valeur par défaut est fausse .
Lors du passage d'une chaîne, si elle n'est pas définie sur true , elle provoquera un avertissement ou une erreur.
Il est recommandé que lors de l'utilisation de IS_A () dans PHP 5.3+, définissez explicitement le troisième paramètre sur TRUE pour prendre en charge le jugement de nom de classe de chaîne.
De cette façon, le code est plus sûr et plus flexible et évite l'instanciation d'objets inutile.