php中instanceof和is_a()

@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。不允許用來檢測常量。

  1. 用 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";
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章