类型运算符

instanceof 用于确定一个 PHP 变量是否属于某一类 class 的实例: 

Example #1 对类使用 instanceof

<?php

class MyClass

{

}

class NotMyClass

{

}

$a = new MyClass;

var_dump($a instanceof MyClass);

var_dump($a instanceof NotMyClass);

?>  

以上例程会输出:

bool(true)

bool(false)

instanceof 也可用来确定一个变量是不是继承自某一父类的子类的实例: 

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 对接口使用 instanceof

<?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 对其它变量使用 instanceof

<?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'

?>  

以上例程会输出:

bool(true)

bool(true)

bool(false)

如果被检测的变量不是对象,instanceof 并不发出任何错误信息而是返回 FALSE。不允许用来检测常量。 

Example #6 用 instanceof 检测其它变量

<?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);

?>  

以上例程会输出:

bool(false)

bool(false)

bool(false)

PHP Fatal error:  instanceof expects an object instance, constant given

然而 instanceof 的使用还有一些陷阱必须了解。在 PHP 5.1.0 之前,如果要检查的类名称不存在,instanceof 会调用 __autoload()。另外,如果该类没有被装载则会产生一个致命错误。可以通过使用动态类引用或用一个包含类名的字符串变量来避开这种问题: 

Example #7 避免 PHP 5.0 中 instanceof 引起的类名查找和致命错误问题

<?php

$d = 'NotMyClass';

var_dump($a instanceof $d); // no fatal error here

?>  

以上例程会输出:

bool(false)

instanceof 运算符是 PHP 5 引进的。在此之前用 is_a(),但是后来 is_a() 被废弃而用 instanceof 替代了。注意自 PHP 5.3.0 起,又恢复使用 is_a() 了。 

参见 get_class() 和 is_a()。 

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

热门产品

php编程基础教程.pptx|php编程培训,php,编程,基础,教程,pptx
php编程基础教程.pptx

历史上的今天:04月29日

热门专题

天麻的功效与作用吃法|天麻的功效与作用,天麻的功效与作用吃法,天麻炖什么治头痛最好,天麻的功效与作用禁忌,天麻多少钱一斤,天麻的功效与作用吃法及禁忌,天麻怎么吃效果最好,天麻粉的功效与作用,天麻怎么吃
天麻的功效与作用吃法
安徽开放大学|安徽开放大学报名,安徽开放大学报考,安徽开放大学,什么是安徽开放大学,安徽开放大学学历,安徽开放大学学费,安徽开放大学报名条件,安徽开放大学报名时间,安徽开放大学学历,安徽开放大学专业
安徽开放大学
昆明综合高中|昆明综合高中
昆明综合高中
大理科技管理学校|大理科技管理学校,大理科技,大理科技中等职业技术学校,大理科技管理中等职业技术学校,大理科技学校
大理科技管理学校
易捷尔单招|易捷尔单招,易捷尔单招培训,易捷尔单招报名,易捷尔单招考试,易捷尔单招培训学校,易捷尔单招分数
易捷尔单招
安徽中源管业有限公司|安徽中源管业有限公司,安徽中源管业有限公司介绍,安徽中源管业有限公司电话,安徽中源管业有限公司地址,安徽中源管业有限公司厂家,安徽中源管业有限公司电力管,安徽中源管业有限公司管材
安徽中源管业有限公司
综合高中|云南综合高中,昆明综合高中,综合高中能考本一吗,综合高中和普通高中的区别,综合高中是什么意思,综合高中能参加全国统一高考吗,综合高中可以考哪些大学,综合高中的学籍是什么
综合高中
云南网站建设|云南网站制作,网站建设,云南网站开发,云南网站设计,云南网页设计,云南网站建设公司,云南网站建设
云南网站建设

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部