Objektorientierte Programmierung (OOP) ist ein sehr wichtiger Bestandteil von PHP. Die Bestimmung, ob ein Objekt zu einer bestimmten Klasse oder seiner übergeordneten Klasse gehört, ist eine häufige Voraussetzung für die tägliche Entwicklung. PHP bietet zwei sehr praktische integrierte Funktionen is_a () und get_parent_class (), um uns zu helfen, diese Funktion zu erreichen. In diesem Artikel wird die Verwendung dieser beiden Funktionen im Detail vorgestellt und anhand von Beispielen demonstriert
Die Funktion is_a () wird verwendet, um festzustellen, ob ein Objekt eine Instanz einer bestimmten Klasse oder eine Unterklasseinstanz dieser Klasse ist. Der Funktionsprototyp lautet wie folgt:
bool is_a(object $object, string $class_name, bool $allow_string = false)
$ Objekt : Die Objektinstanz, die erkannt werden muss.
$ class_name : Der angegebene Klassenname (String).
$ degly_string : Optionaler Parameter, Standard zu False , ob der erste Parameter in die Klassennamenzeichenfolge übergeben werden soll (nicht das Objekt).
Rückgabe true Wenn $ Objekt eine Instanz von $ class_name oder eine Instanz seiner Unterklasse ist, ansonsten falsch .
<?php
class Animal {}
class Dog extends Animal {}
$dog = new Dog();
var_dump(is_a($dog, 'Animal')); // bool(true)
var_dump(is_a($dog, 'Dog')); // bool(true)
var_dump(is_a($dog, 'Cat')); // bool(false)
?>
Im obigen Beispiel ist $ Dog eine Instanz der Hundeklasse , und Dog ist eine Unterklasse von Tier , sodass es bei der Beurteilung des $ Dogs ein tierischer Typ ist.
get_parent_class () wird verwendet, um den Namen der Elternklassen einer Klasse oder eines Objekts zu erhalten. Wenn die Klasse keine übergeordnete Klasse hat, wird Falsch zurückgegeben.
Funktionsprototyp:
string|false get_parent_class(object|string $class)
Die Parameter können eine Objektinstanz oder eine Klassenname -Zeichenfolge sein.
Durch Aufrufen von get_parent_class () können wir feststellen, ob sich ein Objekt in einer bestimmten Erbschaftskette befindet.
<?php
class Vehicle {}
class Car extends Vehicle {}
class SportsCar extends Car {}
$sportsCar = new SportsCar();
$parent = get_parent_class($sportsCar); // Car
while ($parent !== false) {
echo $parent . PHP_EOL;
$parent = get_parent_class($parent);
}
// Ausgabe:
// Car
// Vehicle
?>
Angenommen, wir möchten feststellen, ob ein Objekt zu einer Fahrzeugklasse oder einer Instanz seiner Unterklasse gehört, können wir in Kombination mit get_parent_class () eine rekursive Überprüfung durchführen:
<?php
function isInstanceOfParent($object, $parentClass) {
$class = get_class($object);
if ($class === $parentClass) {
return true;
}
while ($parent = get_parent_class($class)) {
if ($parent === $parentClass) {
return true;
}
$class = $parent;
}
return false;
}
class Vehicle {}
class Car extends Vehicle {}
class SportsCar extends Car {}
$sportsCar = new SportsCar();
var_dump(isInstanceOfParent($sportsCar, 'Vehicle')); // bool(true)
var_dump(isInstanceOfParent($sportsCar, 'Car')); // bool(true)
var_dump(isInstanceOfParent($sportsCar, 'Animal')); // bool(false)
?>
IS_A () ist eine kurze Methode, um festzustellen, ob ein Objekt eine bestimmte Klasse oder eine bestimmte Unterklasse ist und für direktes Urteilsvermögen geeignet ist.
get_parent_class () eignet sich zum Erhalt der übergeordneten Klasseninformationen der Klasse und kann verwendet werden, um komplexere Erbschaftsketten rekursiv zu beurteilen.
Für die meisten Szenarien ist die Verwendung von IS_A () einfach und effizient genug.
Das Kombinieren von get_parent_class () kann eine flexiblere Logik der Vererbungsbeziehung erzielen.
Wenn Sie diese beiden Funktionen beherrschen, können Sie die Art und die Vererbungsstruktur von Objekten besser kontrollieren und die Vererbungsstruktur besser überprüfen und die Robustheit und Wartbarkeit Ihres Codes verbessern.