PHP中nstanceof的使用场景有哪些,能做什么

Admin 2022-09-22 群英技术资讯 248 次浏览

这篇文章给大家分享的是PHP中nstanceof的使用场景有哪些,能做什么。小编觉得挺实用的,因此分享给大家做个参考,文中的介绍得很详细,而要易于理解和学习,有需要的朋友可以参考,接下来就跟随小编一起了解看看吧。

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 通常直接与类名一起使用,但也可以使用对象或字符串变量:
<?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() 了。


这篇关于“PHP中nstanceof的使用场景有哪些,能做什么”的文章就介绍到这了,更多相关的内容,欢迎关注群英网络,小编将为大家输出更多高质量的实用文章! 群英智防CDN,智能加速解决方案
标签: PHP instanceof 

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。

猜你喜欢

成为群英会员,开启智能安全云计算之旅

立即注册
专业资深工程师驻守
7X24小时快速响应
一站式无忧技术支持
免费备案服务
免费拨打  400-678-4567
免费拨打  400-678-4567 免费拨打 400-678-4567 或 0668-2555555
在线客服
微信公众号
返回顶部
返回顶部 返回顶部
在线客服
在线客服