is_a (objet $ objet, string $ class_name, bool $ allow_string = false): bool
$ objet objet à détecter
$ class_name Nom de la classe String
Retour True si l'objet appartient à la classe ou à sa sous-classe, sinon retourne false
Exemple:
class Animal {}
class Dog extends Animal {}
$dog = new Dog();
var_dump(is_a($dog, 'Dog')); // true
var_dump(is_a($dog, 'Animal')); // true,parce que Dog hériter Animal
var_dump(is_a($dog, 'Cat')); // false
Supposons que nous voulons déterminer si un objet appartient à l'un des classes chien , chat ou oiseau , la manière la plus courante est:
if (is_a($obj, 'Dog') || is_a($obj, 'Cat') || is_a($obj, 'Bird')) {
// L'objet appartient à l'une de ces trois classes
}
S'il existe de nombreux types de jugement, il sera gênant d'écrire et ne sera pas propice à l'entretien.
Nous pouvons encapsuler une fonction, passer dans un tableau d'objets et de noms de classe, et la fonction renvoie si l'objet appartient à l'une de ces classes.
function is_a_any($object, array $classNames): bool {
foreach ($classNames as $className) {
if (is_a($object, $className)) {
return true;
}
}
return false;
}
Exemple d'utilisation:
$classes = ['Dog', 'Cat', 'Bird'];
if (is_a_any($obj, $classes)) {
echo "L'objet appartient à l'une des classes";
} else {
echo "Les objets n'appartiennent pas à ces classes";
}
Les noms de classe de PHP sont insensibles à la casse, mais pour la rigueur, nous pouvons uniformément le cas lors du jugement:
function is_a_any($object, array $classNames): bool {
foreach ($classNames as $className) {
if (is_a($object, $className)) {
return true;
}
}
return false;
}
En fait, IS_A () lui-même est déjà insensible au cas, il n'est donc pas nécessaire de faire un traitement supplémentaire.
Si vous souhaitez également déterminer si l'objet a implémenté une certaine interface, IS_A () est également applicable.
<?php
class Dog {}
class Cat {}
class Bird {}
class Bulldog extends Dog {}
function is_a_any($object, array $classNames): bool {
foreach ($classNames as $className) {
if (is_a($object, $className)) {
return true;
}
}
return false;
}
$bulldog = new Bulldog();
$checkClasses = ['Cat', 'Bird', 'Dog'];
if (is_a_any($bulldog, $checkClasses)) {
echo "L'objet appartient à l'une des classes spécifiées";
} else {
echo "Les objets n'appartiennent pas à ces classes";
}
Résultats en cours:
L'objet appartient à l'une des classes spécifiées
Parce que Bulldog est une sous-classe de chien .
is_a () est utilisé pour détecter si un objet appartient à une certaine classe ou à sa sous-classe.
Lorsque vous jugez plusieurs classes, utilisez la fonction d'encapsulation de boucle is_a_any () pour passer dans le tableau de nom de classe
Fonctions flexibles et concises, faciles à entretenir et à développer
En encapsulant de telles fonctions, le code est plus élégant et facile à comprendre, et est une technique pratique couramment utilisée dans le développement.