Aktueller Standort: Startseite> Neueste Artikel> Wie verwendet ich IS_A (), um festzustellen, ob ein Objekt zu mehreren Klassen gehört? Detaillierte Erklärung der Verpackungsmethode

Wie verwendet ich IS_A (), um festzustellen, ob ein Objekt zu mehreren Klassen gehört? Detaillierte Erklärung der Verpackungsmethode

M66 2025-06-28

1. Eine einfache Überprüfung der Funktion is_a ()

IS_A (Objekt $ Objekt, String $ class_name, bool $ degling_string = false): bool

  • $ Objekt Objekt zu erkennen

  • $ class_name class Name Zeichenfolge

  • Geben Sie true zurück, wenn das Objekt zur Klasse oder ihrer Unterklasse gehört, ansonsten false zurückgeben

Beispiel:

 class Animal {}
class Dog extends Animal {}

$dog = new Dog();

var_dump(is_a($dog, 'Dog'));      // true
var_dump(is_a($dog, 'Animal'));   // true,Weil Dog erben Animal
var_dump(is_a($dog, 'Cat'));      // false

2. Anforderungen für Urteile mit mehreren Kategorien

Angenommen, wir möchten feststellen, ob ein Objekt zu einem der Klassenhund , Katze oder Vogel gehört. Der häufigste Weg ist:

 if (is_a($obj, 'Dog') || is_a($obj, 'Cat') || is_a($obj, 'Bird')) {
    // Das Objekt gehört zu einer dieser drei Klassen
}

Wenn es viele Arten von Urteilsvermögen gibt, ist es unpraktisch zu schreiben und wird nicht der Wartung förderlich.


3.. Eine allgemeine Funktion einkapseln

Wir können eine Funktion zusammenfassen, ein Array von Objekten und Klassennamen übergeben, und die Funktion gibt zurück, ob das Objekt zu einer dieser Klassen gehört.

 function is_a_any($object, array $classNames): bool {
    foreach ($classNames as $className) {
        if (is_a($object, $className)) {
            return true;
        }
    }
    return false;
}

Beispiel der Nutzung:

 $classes = ['Dog', 'Cat', 'Bird'];

if (is_a_any($obj, $classes)) {
    echo "Das Objekt gehört zu einer der Klassen";
} else {
    echo "Objekte gehören nicht zu diesen Klassen";
}

4. Weitere Verbesserung - Unterstützt Fallnamen der Fall unempfindliche Klassen und Schnittstellenurteil

Die Klassennamen von PHP sind unempfindlich, aber aus Gründen der Strenge können wir bei der Beurteilung einheitlich einheitlich zuweisen:

 function is_a_any($object, array $classNames): bool {
    foreach ($classNames as $className) {
        if (is_a($object, $className)) {
            return true;
        }
    }
    return false;
}

Tatsächlich ist IS_A () selbst bereits von Fall unempfindlich, sodass keine zusätzliche Verarbeitung durchgeführt werden muss.

Wenn Sie auch feststellen möchten, ob das Objekt eine bestimmte Schnittstelle implementiert hat, ist IS_A () ebenfalls anwendbar.


5. Demonstrieren Sie den vollständigen Code mit Beispielen

 <?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 "Das Objekt gehört zu einer der angegebenen Klassen";
} else {
    echo "Objekte gehören nicht zu diesen Klassen";
}

Auslaufergebnisse:

 Das Objekt gehört zu einer der angegebenen Klassen

Weil Bulldog eine Unterklasse von Hund ist.


6. Zusammenfassung

  • IS_A () wird verwendet, um festzustellen, ob ein Objekt zu einer bestimmten Klasse oder seiner Unterklasse gehört.

  • Verwenden Sie bei der Beurteilung mehrerer Klassen die Funktion der Schleifenkapselung is_a_any (), um das Klassenname -Array zu übergeben

  • Flexible und prägnante Funktionen, leicht zu warten und zu erweitern

Durch die Einschränkung solcher Funktionen ist der Code eleganter und leicht zu verstehen und eine praktische Technik, die häufig in der Entwicklung verwendet wird.