Signatur
Beschreibung
class_parents() liefert alle direkten und indirekten Elternklassen einer Klasse oder eines Objekts als assoziatives Array, bei dem sowohl Schlüssel als auch Wert jeweils der Klassenname ist. Die Reihenfolge entspricht der Vererbungskette: Die direkteste Elternklasse steht zuerst, gefolgt von deren Elternklassen usw.
Die Funktion ist besonders nützlich, wenn geprüft werden soll, ob eine Klasse von einer bestimmten Basisklasse erbt – etwa in Frameworks, Dependency-Injection-Containern oder bei der Validierung von Typ-Hierarchien. Sie ergänzt instanceof dort, wo nur der Name der Elternklasse als String vorliegt.
Mit dem Parameter $autoload kann gesteuert werden, ob der PHP-Autoloader aufgerufen werden soll, falls die Klasse noch nicht geladen ist. Ist die Klasse weder geladen noch autoladbar und $autoload ist false, gibt die Funktion false zurück.
Im Gegensatz zu class_implements(), das Interfaces zurückgibt, und class_uses(), das Traits zurückgibt, konzentriert sich class_parents() ausschließlich auf die klassische Vererbungshierarchie über extends.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $object_or_class Pflicht | object|string | Ein Objekt oder der Name einer Klasse als String, deren Elternklassen ermittelt werden sollen. | |
| $autoload | bool | true | Gibt an, ob der Autoloader aufgerufen werden soll, falls die Klasse noch nicht geladen ist. Bei false wird kein Autoloading durchgeführt. |
Rückgabewert
['KlassenName' => 'KlassenName', ...] mit allen Elternklassen in Reihenfolge der Vererbungskette. Gibt false zurück, wenn die angegebene Klasse nicht existiert und auch nicht autogeloaded werden konnte.Beispiele
Elternklassen einer einfachen Vererbungskette ermitteln
<?php
class Fahrzeug {}
class Auto extends Fahrzeug {}
class Sportwagen extends Auto {}
$eltern = class_parents(Sportwagen::class);
print_r($eltern);
Prüfen, ob eine Klasse von einer bestimmten Basisklasse erbt
<?php
class Model {}
class ActiveRecord extends Model {}
class UserModel extends ActiveRecord {}
$obj = new UserModel();
if (isset(class_parents($obj)['Model'])) {
echo 'UserModel erbt von Model.';
} else {
echo 'Keine Vererbung von Model.';
}
Autoloading deaktiviert – nicht geladene Klasse
<?php
// Klasse 'NichtVorhandeneKlasse' ist nicht definiert und nicht autoladbar
$result = class_parents('NichtVorhandeneKlasse', false);
var_dump($result);
// Wichtig · Fallstricke
Hinweis zur Verwendung mit Interfaces und Traits: class_parents() gibt keine Interfaces zurück, die eine Klasse implementiert. Dafür steht class_implements() zur Verfügung. Traits werden über class_uses() abgefragt.
Autoloading: Wird ein Klassenname als String übergeben und die Klasse ist noch nicht geladen, löst PHP bei $autoload = true (Standard) den registrierten Autoloader aus. In manchen Umgebungen (z. B. Test-Setups) kann es sinnvoll sein, false zu übergeben, um unbeabsichtigtes Laden zu verhindern.
Objekt vs. String: Bei Übergabe eines Objekts schlägt die Funktion nie fehl, da das Objekt bereits instanziiert ist. Der Rückgabewert false tritt nur auf, wenn ein nicht existierender Klassenname als String übergeben wird und kein Autoloading greift.