@instanceof和is_a()
instanceof
用於確定一個 PHP 變量是否屬於某一類 class 的實例,對於class的類型大概分爲:
1.正常類
class MyClass
{
}
class NotMyClass
{
}
$a = new MyClass;
var_dump($a instanceof MyClass);
var_dump($a instanceof NotMyClass);
bool(true)
bool(false)
2.父類
class ParentClass
{
}
class MyClass extends ParentClass
{
}
$a = new MyClass;
var_dump($a instanceof MyClass);
var_dump($a instanceof ParentClass);
bool(true)
bool(true)
3.實現了接口的類
interface MyInterface
{
}
class MyClass implements MyInterface
{
}
$a = new MyClass;
var_dump($a instanceof MyClass);
var_dump($a instanceof MyInterface);
bool(true)
bool(true)
4.使用對象或字符串變量:
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'
bool(true)
bool(true)
bool(false)
如果被檢測的變量不是對象,instanceof 並不發出任何錯誤信息而是返回 FALSE。不允許用來檢測常量。
- 用 instanceof 檢測其它變量
$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);
bool(false)
bool(false)
bool(false)
PHP Fatal error: instanceof expects an object instance, constant given
is_a()
instanceof 運算符是 PHP 5 引進的。在此之前用 is_a(),但是後來 is_a() 被廢棄而用 instanceof 替代了。
PHP 5.3.0 起,又恢復使用 is_a() 了。
bool is_a( object $object, string $class_name[, bool $allow_string = FALSE] )
class WidgetFactory
{
var $oink = 'moo';
}
// create a new object
$WF = new WidgetFactory();
if (is_a($WF, 'WidgetFactory')) {
echo "yes, \$WF is still a WidgetFactory\n";
}