instanceof wird verwendet, um zu bestimmen, ob eine PHP-Variable zu einer Instanz einer bestimmten Klasse gehört:
Beispiel Nr. 1 Verwenden Sie „instanceof“
<?php class MyClass { } class NotMyClass { } $a = new MyClass; var_dump($a instanceof MyClass); var_dump($a instanceof NotMyClass); ?>
für eine Klasse. Die obige Routine wird ausgegeben :
bool(true)
bool(false)
instanceof kann auch verwendet werden, um zu bestimmen, ob eine Variable eine Instanz einer von einer übergeordneten Klasse geerbten Unterklasse ist:
Beispiel #2 Bei Verwendung von „instanceof“
<?php class ParentClass { } class MyClass extends ParentClass { } $a = new MyClass; var_dump($a instanceof MyClass); var_dump($a instanceof ParentClass); ?>
für geerbte Klassen gibt die obige Routine Folgendes aus:
bool(true)
bool(true)
Überprüfen Sie, ob Ein Objekt ist kein bestimmtes Objekt. Für Instanzen einer Klasse können Sie den logischen Operator not verwenden.
Beispiel #3 Verwenden Sie „instanceof“, um zu überprüfen, ob das Objekt keine Instanz einer bestimmten Klasse ist
<?php class MyClass { } $a = new MyClass; var_dump(!($a instanceof stdClass)); ?>
Die obige Routine gibt Folgendes aus:
bool(true)
Schließlich kann „instanceof“ auch verwendet werden, um zu bestimmen, ob eine Variable eine Instanz eines Objekts ist, das eine Schnittstelle implementiert:
Beispiel #4 Verwendung von „instanceof“
<?php interface MyInterface { } class MyClass implements MyInterface { } $a = new MyClass; var_dump($a instanceof MyClass); var_dump($a instanceof MyInterface); ?>
auf einer Schnittstelle Die obige Routine gibt Folgendes aus:
bool(true)
bool(true)
Obwohl „instanceof“ normalerweise direkt mit dem Klassennamen verwendet wird, können auch Objekt- oder Stringvariablen verwendet werden:
<?php interface MyInterface { } class MyClass implements MyInterface { } $a = new MyClass; $b = new MyClass; $c = 'MyClass'; $d = 'NotMyClass'; var_dump($a instanceof $b); // $b is an object of class MyClass var_dump($a instanceof $c); // $c is a string 'MyClass' var_dump($a instanceof $d); // $d is a string 'NotMyClass' ?>
Oben Beispiel Der Prozess gibt Folgendes aus:
bool(true)
bool(true)
bool(false)
Wenn die getestete Variable dies nicht ist Bei einem Objekt gibt die Instanz von keine Fehlermeldung aus, aber „Ja“ gibt FALSE zurück. Konstanten dürfen nicht erkannt werden.
Beispiel Nr. 6: Verwenden Sie „instanceof“, um andere Variablen zu erkennen.
<?php $a = 1; $b = NULL; $c = imagecreate(5, 5); var_dump($a instanceof stdClass); // $a is an integer var_dump($b instanceof stdClass); // $b is NULL var_dump($c instanceof stdClass); // $c is a resource var_dump(FALSE instanceof stdClass); ?>
Die obige Routine gibt Folgendes aus:
bool(false)
bool(false)
bool(false). )
Schwerwiegender PHP-Fehler: Instanz von erwartet eine Objektinstanz, Konstante angegeben
Es gibt jedoch einige Fallen, die bei der Verwendung von Instanz von verstanden werden müssen. Vor PHP 5.1.0 rief die Instanz von __autoload() auf, wenn der zu überprüfende Klassenname nicht existierte. Darüber hinaus wird ein schwerwiegender Fehler generiert, wenn die Klasse nicht geladen wird. Sie können dieses Problem vermeiden, indem Sie eine dynamische Klassenreferenz oder eine String-Variable verwenden, die den Klassennamen enthält:
Beispiel #7 Vermeiden Sie die Suche nach Klassennamen und schwerwiegende Fehler, die durch „instanceof“ in PHP 5.0 verursacht werden
<?php $d = 'NotMyClass'; var_dump($a instanceof $d); // no fatal error here ?>
Die obige Routine gibt Folgendes aus:
bool(false)
instanceof-Operator wurde in PHP 5 eingeführt. Zuvor wurde is_a() verwendet, später wurde is_a() jedoch aufgegeben und durch „instanceof“ ersetzt. Beachten Sie, dass ab PHP 5.3.0 die Verwendung von is_a() wiederhergestellt ist.