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


Posted in PHP onNovember 05, 2015

PHP5的另一个新成员是instdnceof关键字。使用这个关键字可以确定一个对象是类的实例、类的子类,还是实现了某个特定接口,并进行相应的操作。在某些情况下,我们希望确定某个类是否特定的类型,或者是否实现了特定的接口。instanceof操作符非常适合完成这个任务。instanceof操作符检查三件事情:实例是否某个特定的类型,实例是否从某个特定的类型继承,实例或者他的任何祖先类是否实现了特定的接口。例如,假设希望了解名为manager的对象是否为类Employee的实例:

$manager = new Employee();
…
if ($manager instanceof Employee)
  echo "Yes";

有两点值得注意。首先,类名没有任何定界符(引号)。使用定界符将导致语法错误。其次,如果比较失败,脚本将退出执行。instanceof关键字在同时处理多个对象时特别有用。例如,你可能要重复地调用某个函数,但希望根据对象类型调整函数的行为。可以使用case语句和instanceof关键字来实现这个目标。

class test{}
class test{}
class testChilern Extends test{}
$a = new test();
$m = new test();
$i = ($m instanceof test);
if($i)
  echo '$m是类test的实例!<br />'; // get this value
switch ($a instanceof test){
  case true :
    echo 'YES<br />';
    break;
  case false :
    echo 'No<br />'; //get this value
    break;
}
$d=new testChilern();
if($d instanceof test)echo '$d是类test的子类!<br />'; // get this value

php中 instanceof有什么作用

作用:(1)判断一个对象是否是某个类的实例,(2)判断一个对象是否实现了某个接口。

第一种用法:

<?php
$obj = new A();
if ($obj instanceof A) {
  echo 'A';
}

第二种用法:

<?php
interface ExampleInterface
{
   public function interfaceMethod();
 }
 class ExampleClass implements ExampleInterface
{
   public function interfaceMethod()
   {
     return 'Hello World!';
   }
 }
$exampleInstance = new ExampleClass();
 if($exampleInstance instanceof ExampleInterface){
   echo 'Yes, it is';
 }else{
   echo 'No, it is not';
} 
?>

输出结果:Yes, it is

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

<?php
class Foo {
   public $foobar = 'Foo';
   public function test() {
     echo $this->foobar . "\n";
   }
 }
 class Bar extends Foo {
   public $foobar = 'Bar';
 }
$a = new Foo();
$b = new Bar();
echo "use of test() method\n";
$a->test();
$b->test();
echo "instanceof Foo\n";
var_dump($a instanceof Foo); // TRUE
var_dump($b instanceof Foo); // TRUE
echo "instanceof Bar\n";
var_dump($a instanceof Bar); // FALSE
var_dump($b instanceof Bar); // TRUE
echo "subclass of Foo\n";
var_dump(is_subclass_of($a, 'Foo')); // FALSE
var_dump(is_subclass_of($b, 'Foo')); // TRUE
echo "subclass of Bar\n";
var_dump(is_subclass_of($a, 'Bar')); // FALSE
var_dump(is_subclass_of($b, 'Bar')); // FALSE
?>

 输出结果(PHP 5.4.4):

 use of test() method
 Foo
 Bar
 instanceof Foo
 bool(true)
 bool(true)
 instanceof Bar
 bool(false)
 bool(true)
 subclass of Foo
 bool(false)
 bool(true)
 subclass of Bar
 bool(false)

以上内容是本文给大家介绍的PHP中instanceof关键字及instanceof关键字有什么作用的全部内容,希望大家喜欢。

PHP 相关文章推荐
服务器端解压缩zip的脚本
Dec 22 PHP
基于Snoopy的PHP近似完美获取网站编码的代码
Oct 23 PHP
ThinkPHP验证码使用简明教程
Mar 05 PHP
PHP管理依赖(dependency)关系工具 Composer 安装与使用
Aug 18 PHP
通过修改配置真正解决php文件上传大小限制问题(nginx+php)
Sep 23 PHP
详解WordPress开发中wp_title()函数的用法
Jan 07 PHP
注释PHP和html混合代码的小技巧(分享)
Nov 03 PHP
php源码之将图片转化为data/base64数据流实例详解
Nov 27 PHP
PDO::_construct讲解
Jan 27 PHP
PHP使用Redis实现Session共享的实现示例
May 12 PHP
Referer原理与图片防盗链实现方法详解
Jul 03 PHP
ThinkPHP类似AOP思想的参数验证的实现方法
Dec 18 PHP
PHP递归创建多级目录
Nov 05 #PHP
PHP中的静态变量及static静态变量使用详解
Nov 05 #PHP
PHP环境中Memcache的安装和使用
Nov 05 #PHP
php生成gif动画的方法
Nov 05 #PHP
浅析PHP中call user func()函数及如何使用call user func调用自定义函数
Nov 05 #PHP
php无限分类使用concat如何实现
Nov 05 #PHP
PHP json_encode() 函数详解及中文乱码问题
Nov 05 #PHP
You might like
一个php作的文本留言本的例子(五)
2006/10/09 PHP
PHP 命名空间实例说明
2011/01/27 PHP
PHP逐行输出(ob_flush与flush的组合)
2012/02/04 PHP
php文件下载处理方法分析
2015/04/22 PHP
Laravel学习教程之从入口到输出过程详解
2017/08/27 PHP
laravel配置Redis多个库的实现方法
2019/04/10 PHP
可以用鼠标拖动的DIV实现思路及代码
2013/10/21 Javascript
解决window.opener=null;window.close(),只支持IE6不支持IE7,IE8的问题
2014/01/14 Javascript
node.js中的favicon.ico请求问题处理
2014/12/15 Javascript
详解jQuery移动页面开发中的ui-grid网格布局使用
2015/12/03 Javascript
JS实现简单的右下角弹出提示窗口完整实例
2016/06/21 Javascript
使用JS中的exec()方法构造正则表达式验证
2016/08/01 Javascript
JavaScript类的写法
2016/09/17 Javascript
详解vue前后台数据交互vue-resource文档
2017/07/19 Javascript
实例详解ztree在vue项目中使用并且带有搜索功能
2018/08/24 Javascript
vue项目打包后上传至GitHub并实现github-pages的预览
2019/05/06 Javascript
Nodejs监控事件循环异常示例详解
2019/09/22 NodeJs
微信小程序语音同步智能识别的实现案例代码解析
2020/05/29 Javascript
python如何对实例属性进行类型检查
2018/03/20 Python
在IPython中执行Python程序文件的示例
2018/11/01 Python
python生成器与迭代器详解
2019/01/01 Python
简单了解python中对象的取反运算符
2019/07/01 Python
春节到了 教你使用python来抢票回家
2020/01/06 Python
keras 获取某层的输入/输出 tensor 尺寸操作
2020/06/10 Python
html5贪吃蛇游戏使用63行代码完美实现
2013/06/25 HTML / CSS
HTML5之语义标签介绍
2016/07/07 HTML / CSS
资源工程专业毕业生求职信
2014/02/27 职场文书
综合实践活动总结
2014/05/05 职场文书
家长会欢迎标语
2014/06/24 职场文书
党委领导班子整改方案
2014/09/30 职场文书
工作失误检讨书
2015/01/26 职场文书
绿里奇迹观后感
2015/06/15 职场文书
Spring Boot两种全局配置和两种注解的操作方法
2021/06/29 Java/Android
mysq启动失败问题及场景分析
2021/07/15 MySQL
《我的美好婚事》动画化决定纪念插画与先导PV公开
2022/04/06 日漫
mysql 乱码 字符集latin1转UTF8
2022/04/19 MySQL