php类型运算符

伊谢尔伦
发布: 2016-11-24 13:24:30
原创
1585人浏览过

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

Example #1 对类使用 instanceof

1

2

3

4

5

6

7

8

9

10

11

<?php

    class MyClass

    {

    }

    class NotMyClass

    {

    }

    $a = new MyClass;

    var_dump($a instanceof MyClass);

    var_dump($a instanceof NotMyClass);

?>

登录后复制

以上例程会输出:

立即学习PHP免费学习笔记(深入)”;

bool(true)
bool(false)

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

Example #2 对继承类使用 instanceof

1

2

3

4

5

6

7

8

9

10

11

<?php

    class ParentClass

    {

    }

    class MyClass extends ParentClass

    {

    }

    $a = new MyClass;

    var_dump($a instanceof MyClass);

    var_dump($a instanceof ParentClass);

?>

登录后复制

以上例程会输出:

立即学习PHP免费学习笔记(深入)”;

bool(true)
bool(true)

检查一个对象是否不是某个类的实例,可以使用逻辑运算符 not。

Example #3 使用 instanceof 检查对象不是某个类的实例

1

2

3

4

5

6

7

<?php

    class MyClass

    {

    }

    $a = new MyClass;

    var_dump(!($a instanceof stdClass));

?>

登录后复制

以上例程会输出:

立即学习PHP免费学习笔记(深入)”;

bool(true)

最后,instanceof也可用于确定一个变量是不是实现了某个接口的对象的实例:

Example #4 对接口使用 instanceof

1

2

3

4

5

6

7

8

9

10

11

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

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

?>

登录后复制

以上例程会输出:

立即学习PHP免费学习笔记(深入)”;

bool(true)
bool(true)
bool(false)

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

1

2

3

4

5

6

7

8

9

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

?>

登录后复制

以上例程会输出:

立即学习PHP免费学习笔记(深入)”;

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 引起的类名查找和致命错误问题

1

2

3

4

<?php

    $d = 'NotMyClass';

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

?>

登录后复制

以上例程会输出:

立即学习PHP免费学习笔记(深入)”;

bool(false)

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

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号