(PHP 4, PHP 5, PHP 7)
is_subclass_of — Prüft ob ein Objekt von der angegebenen Klasse abstammt oder sie implementiert
Diese Funktion prüft ob das Objekt objekt
von der Klasse class_name
abstammt oder sie implementiert.
object
Ein Klassenname oder eine Objektinstanz. Es wird kein Fehler generiert, wenn die Klasse nicht existiert.
class_name
Ein Klassenname
allow_string
Wenn dieser Parameter false ist, ist ein Zeichenketten-Klassenname als
object
nicht erlaubt. Dies verhindert ebenso den
Aufruf vom Autoloader, wenn die Klasse nicht existiert.
Die Funktion liefert TRUE
wenn die Klasse des Objekts
object
eine Unterklasse von
class_name
ist, sonst FALSE
.
Version | Beschreibung |
---|---|
5.3.9 |
allow_string Parameter hinzugefügt
|
5.3.7 |
class_name kann nun auch der Name eines
Interfaces sein
|
5.0.3 |
Als object kann nun auch ein Klassenname
anstelle einer Objektinstanz übergeben werden.
|
Beispiel #1 is_subclass_of() Beispiel
<?php
// Definition einer Klasse
class WidgetFactory
{
var $oink = 'moo';
}
// Definition einer Kindklasse
class WidgetFactory_Child extends WidgetFactory
{
var $oink = 'oink';
}
// Erzeugung von Objekten
$WF = new WidgetFactory();
$WFC = new WidgetFactory_Child();
if (is_subclass_of($WFC, 'WidgetFactory')) {
echo "Ja, \$WFC ist eine Unterklasse von WidgetFactory\n";
} else {
echo "Nein, \$WFC ist keine Unterklasse von WidgetFactory\n";
}
if (is_subclass_of($WF, 'WidgetFactory')) {
echo "Ja, \$WF ist eine Unterklasse von WidgetFactory\n";
} else {
echo "Nein, \$WF ist keine Unterklasse von WidgetFactory\n";
}
// ab PHP 5.0.3 funktioniert auch
if (is_subclass_of('WidgetFactory_Child', 'WidgetFactory')) {
echo "Ja, WidgetFactory_Child ist eine Unterklasse von WidgetFactory\n";
} else {
echo "Nein, WidgetFactory_Child ist keine Unterklasse von WidgetFactory\n";
}
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
Ja, $WFC ist eine Unterklasse von WidgetFactory Nein, $WF ist keine Unterklasse von WidgetFactory Ja, WidgetFactory_Child ist eine Unterklasse von WidgetFactory
Beispiel #2 Verwendung von is_subclass_of() mit einem Interface
<?php
// Definition des Interface
interface MyInterface
{
public function MyFunction();
}
// Definition der Klassenimplementierung des Interface
class MyClass implements MyInterface
{
public function MyFunction()
{
return "MyClass implementiert MyInterface!";
}
}
// Objekt-Erzeugung
$my_object = new MyClass;
// Funktioniert seit 5.3.7
// Prüfung unter Verwendung des Objektexemplars der Klasse
if (is_subclass_of($my_object, 'MyInterface')) {
echo "Ja, \$my_object ist eine Unterklasse von MyInterface\n";
} else {
echo "Nein, \$my_object ist keine Unterklasse von MyInterface\n";
}
// Prüfung unter Verwendung des Klassennamens als Zeichenkette
if (is_subclass_of('MyClass', 'MyInterface')) {
echo "Ja, MyClass ist eine Unterklasse von MyInterface\n";
} else {
echo "Nein, MyClass ist keine Unterklasse von MyInterface\n";
}
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
Ja, $my_object ist eine Unterklasse von MyInterface Ja, MyClass ist eine Unterklasse von MyInterface
Hinweis:
Die Verwendung dieser Funktion wird jegliche registrierte Autoloader verwenden, falls die Klasse nicht bereits bekannt ist.