instanceof 也可用來確定一個變量是不是繼承自某一父類的子類的實例: can also be used to determine whether a variable is an instantiated object of a class that inherits from a parent class:
Example #2 instanceof 與繼承類示例
<?php
class ParentClass
{
}
class MyClass extends ParentClass
{
}
$a = new MyClass;
var_dump($a instanceof MyClass);
var_dump($a instanceof ParentClass);
?>
以上例程會輸出:
bool(true)
bool(true)
檢查一個對象 不是 某個類的實例,可以使用 邏輯運算符 not。
Example #3 使用instanceof檢查對象 不是 某一類的實例
<?php
class MyClass
{
}
$a = new MyClass;
var_dump(!($a instanceof stdClass));
?>
以上例程會輸出:
bool(true)
最后,instanceof也可用于確定一個變量是不是實現了某個接口的對象的實例:
Example #4 Using instanceof for class
<?php
interface MyInterface
{
}
class MyClass implements MyInterface
{
}
$a = new MyClass;
var_dump($a instanceof MyClass);
var_dump($a instanceof MyInterface);
?>
以上例程會輸出:
bool(true)
bool(true)
雖然 instanceof 通常直接與類名一起使用,但也可以使用對象或字符串變量:
Example #5 Using instanceof with other variables
<?php
interface MyInterface
{
}
class MyClass implements MyInterface
{
}
$a = new MyClass;
$b = new MyClass;
$c = 'MyClass';
$d = 'NotMyClass';
var_dump($a instanceof $b); /pic/div>
var_dump($a instanceof $c); /pic/div>
var_dump($a instanceof $d); /pic/div>
?>
以上例程會輸出:
bool(true) bool(true) bool(false)
然而 instanceof 的使用還有一些陷阱必須了解。在 PHP 5.1.0之前,如果要檢查的類名稱不存在,instanceof 會調用 __autoload()。另外,如果該類沒有被裝載則會產生一個致命錯誤。可以通過使用動態類引用(dynamic class reference)或用一個包含類名的字符串變量來避開這種問題: