Position actuelle: Accueil> Derniers articles> Comment utiliser IS_A () pour déterminer si un objet appartient à l'une des classes multiples? Explication détaillée de la méthode d'emballage

Comment utiliser IS_A () pour déterminer si un objet appartient à l'une des classes multiples? Explication détaillée de la méthode d'emballage

M66 2025-06-28

1. Une revue simple de la fonction is_a ()

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

2. Exigences pour les jugements multi-catégories

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.


3. Encapsuler une fonction générale

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";
}

4. Amélioration supplémentaire - prend en charge les noms de classe insensibles aux cas et le jugement d'interface

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.


5. Démontrer le code complet avec des exemples

 <?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&#39;objet appartient à l&#39;une des classes spécifiées";
} else {
    echo "Les objets n&#39;appartiennent pas à ces classes";
}

Résultats en cours:

 L&#39;objet appartient à l&#39;une des classes spécifiées

Parce que Bulldog est une sous-classe de chien .


6. Résumé

  • 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.