instanceof关键字是PHP5新增的新成员。在一些情况下,我们希望确定某个类属于哪种特定的类型、或者是否实现了特定的接口,这时我们就可以使用这个关键字确定一个对象是否是某个特定的类型,是否是从某个特定的类型继承以及它或它的任何祖先类是否实现了特定的接口。

  例如,假设希望了解名为test的对象是否为类Test的实例:

  1. <?php
  2.  
  3. class Test{}
  4. $test = new Test();
  5. if ($test instanceof Test) {
  6. echo "Yes";
  7. }else{
  8. echo "No";

instanceof关键字在同时处理多个对象是特别有用。例如,你可能要重复地调用某一个函数,希望根据对象类型调整函数的行为。可以使用case语句和instanceof关键字实现这个目标。

  1. <?php
  2. header("Content-type:text/html;charset=utf8");
  3.  
  4. class Test{}
  5. class testChilern Extends Test{}
  6. $a = new Test();
  7. $m = new Test();
  8. if($m instanceof Test)
  9. echo '$m是类Test的实例!<br />';
  10. switch ($a instanceof Test){
  11. case true :
  12. echo 'YES <br />';
  13. break;
  14. case false :
  15. echo 'No <br />';
  16. break;
  17. }
  18. $d = new testChilern();
  19. if($d instanceof Test)
  20. echo '$d是类Test的子类!<br />';

我们还可以使用instanceof关键字判断一个对象是否实现了某一个接口

  1. <?php
  2. header("Content-type:text/html;charset=utf8");
  3.  
  4. interface ExampleInterface
  5. {
  6. public function interfaceMethod();
  7. }
  8. class ExampleClass implements ExampleInterface
  9. {
  10. public function interfaceMethod()
  11. {
  12. return 'Hello World!';
  13. }
  14. }
  15. $exampleInstance = new ExampleClass();
  16. if($exampleInstance instanceof ExampleInterface){
  17. echo 'Yes, it is';
  18. }else{
  19. echo 'No, it is not';
  20. }

另外,需注意 instanceof 与 is_subclass_of() 的区别,请看代码:

  1. <?php
  2. header("Content-type:text/html;charset=utf8");
  3.  
  4. class Foo {
  5. public $foobar = 'Foo';
  6. public function test() {
  7. echo $this->foobar . "\n";
  8. }
  9. }
  10. class Bar extends Foo {
  11. public $foobar = 'Bar';
  12. }
  13. $a = new Foo();
  14. $b = new Bar();
  15. echo "use of test() method\n";
  16. $a->test();
  17. $b->test();
  18. echo "instanceof Foo\n";
  19. var_dump($a instanceof Foo); // TRUE
  20. var_dump($b instanceof Foo); // TRUE
  21. echo "instanceof Bar\n";
  22. var_dump($a instanceof Bar); // FALSE
  23. var_dump($b instanceof Bar); // TRUE
  24. echo "subclass of Foo\n";
  25. var_dump(is_subclass_of($a, 'Foo')); // FALSE
  26. var_dump(is_subclass_of($b, 'Foo')); // TRUE
  27. echo "subclass of Bar\n";
  28. var_dump(is_subclass_of($a, 'Bar')); // FALSE
  29. var_dump(is_subclass_of($b, 'Bar')); // FALSE

is_subclass_of 的作用就是判断一个对象是否是该类的子类,是则返回 TRUE。

PHP中instanceof关键字的更多相关文章

  1. Java中instanceof关键字的用法

    Java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例.instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例. instanc ...

  2. 详解PHP中instanceof关键字及instanceof关键字有什么作用

    来源:https://www.jb51.net/article/74409.htm PHP5的另一个新成员是instdnceof关键字.使用这个关键字可以确定一个对象是类的实例.类的子类,还是实现了某 ...

  3. Java中instanceof关键字的理解

    java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例.instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例. 用法: res ...

  4. JAVA中INSTANCEOF关键字的用法总结

    https://www.cnblogs.com/jay36/p/7519145.html https://www.cnblogs.com/zjxynq/p/5882756.html https://b ...

  5. [zz]Java中的instanceof关键字

    1.What is the 'instanceof' operator used for? stackoverflow的一个回答:http://stackoverflow.com/questions/ ...

  6. PHP 面向对象中常见关键字使用(final、static、const和instanceof)

    PHP 面向对象中常见关键字的使用: 1.final :final关键字可以加在类或者类中方法之前,但是不能使用final标识成员属性. 作用: 使用final标识的类,不能被继承. 在类中使用fin ...

  7. Java instanceof 关键字是如何实现的?

    作者:RednaxelaFX链接:https://www.zhihu.com/question/21574535/answer/18998914来源:知乎著作权归作者所有.商业转载请联系作者获得授权, ...

  8. Java基础系列--instanceof关键字

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/8492158.html instanceof关键字是在Java类中实现equals方法最常使 ...

  9. java基础9 main函数、this、static、super、final、instanceof 关键字

    一.main函数详解 1.public:公共的.权限是最大的,在任何情况都可以访问  原因:为了保证jvm在任何情况下都可以访问到main法2.static:静态,静态可以让jvm调用更方便,不需要用 ...

随机推荐

  1. 自制xml实现SQL动态参数配置

    此文章是基于 搭建SpringMVC+Spring+Hibernate平台 一. 准备工作 1. 点击此找到并下载 commons-digester3-3.2.jar 2. 点击此找到并下载 comm ...

  2. 微软本月将推Win10 望打破Win8所带来差评影响

    系统妈 据香港“文汇报”7月15日报道,美国电脑巨擘微软13日宣布,新视窗系统10(Windows 10)将于7月29日推出.微软高层迈赫迪在网志表示,届时全球将有13个城市举办特别活动,表扬参与Wi ...

  3. python flask (一)

    from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello World ...

  4. [No00009A]JsonToObject json与类互转

    using System.Web.Script.Serialization; /// <summary> /// 内部类,保存jsonData /// </summary> p ...

  5. Openvpn 撤销签署的证书(删除用户)

    https://wiki.archlinux.org/index.php/Easy-rsa Revoking certificates and alerting the OpenVPN server ...

  6. PAT 1042. 字符统计(20)

    请编写程序,找出一段给定文字中出现最频繁的那个英文字母. 输入格式: 输入在一行中给出一个长度不超过1000的字符串.字符串由ASCII码表中任意可见字符及空格组成,至少包含1个英文字母,以回车结束( ...

  7. mongodb 速成笔记

    以下环境为mac osx + jdk 1.8 + mongodb v3.2.3 一.安装 brew安装方式是mac下最简单的方式 brew update brew install mongodb 其它 ...

  8. [LeetCode] Find Peak Element 求数组的局部峰值

    A peak element is an element that is greater than its neighbors. Given an input array where num[i] ≠ ...

  9. [LeetCode] Linked List Cycle 单链表中的环

    Given a linked list, determine if it has a cycle in it. Follow up: Can you solve it without using ex ...

  10. ASP.NET MVC VS2010中更改默认调试浏览器

    在Visual Studio 2010(RC)中右键点击 .aspx 页面已不复存在"browse with"菜单项.那要如何修改调试时使用的默认浏览器呢? 默认情况下,VS会使用 ...