详解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 相关文章推荐
php expects parameter 1 to be resource, array given 错误
Mar 23 PHP
Yii把CGridView文本框换成下拉框的方法
Dec 03 PHP
php+mysql删除指定编号员工信息的方法
Jan 14 PHP
PHP中substr_count()函数获取子字符串出现次数的方法
Jan 07 PHP
PHP 自动加载的简单实现(推荐)
Aug 12 PHP
SAE实时日志接口SDK用法示例
Oct 09 PHP
[原创]php正则删除img标签的方法示例
May 27 PHP
关于ThinkPHP中的异常处理详解
May 11 PHP
PHP类与对象后期静态绑定操作实例详解
Dec 20 PHP
Discuz不使用插件实现简单的打赏功能
Mar 21 PHP
深入理解PHP+Mysql分布式事务与解决方案
Dec 03 PHP
浅谈Laravel中使用Slack进行异常通知
May 29 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计划任务之关闭浏览器后仍然继续执行的函数
2010/07/22 PHP
destoon二次开发模板及调用语法汇总
2014/06/21 PHP
PHP实现将科学计数法转换为原始数字字符串的方法
2014/12/16 PHP
PHP邮件群发机实现代码
2016/02/16 PHP
使用ucenter实现多站点同步登录的讲解
2019/03/21 PHP
10个基于jQuery或JavaScript的WYSIWYG 编辑器整理
2010/05/06 Javascript
JS清除IE浏览器缓存的方法
2013/07/26 Javascript
jquery通过a标签删除table中的一行的代码
2013/12/02 Javascript
jquery插件tooltipv顶部淡入淡出效果使用示例
2013/12/05 Javascript
JavaScript入门系列之知识点总结
2016/03/24 Javascript
Bootstrap开关(switch)控件学习笔记分享
2016/05/30 Javascript
基于jQuery实现选项卡效果
2017/01/04 Javascript
深入浅析ES6 Class 中的 super 关键字
2017/10/20 Javascript
vue+springboot前后端分离实现单点登录跨域问题解决方法
2018/01/30 Javascript
AngularJS $http post 传递参数数据的方法
2018/10/09 Javascript
JS函数进阶之prototy用法实例分析
2020/01/15 Javascript
Vue通过getAction的finally来最大程度避免影响主数据呈现问题
2020/04/24 Javascript
[01:05]主宰至宝剑心之遗
2017/03/16 DOTA
Python 实现一个颜色色值转换的小工具
2016/12/06 Python
python实现数据写入excel表格
2018/03/25 Python
对Python中9种生成新对象的方法总结
2018/05/23 Python
详解Python3定时器任务代码
2019/09/23 Python
使用Python第三方库pygame写个贪吃蛇小游戏
2020/03/06 Python
在Python IDLE 下调用anaconda中的库教程
2020/03/09 Python
Python bisect模块原理及常见实例
2020/06/17 Python
css3 transform过渡抖动问题解决
2020/10/23 HTML / CSS
Paradigit比利时电脑卖场:购买笔记本、电脑、平板和外围设备
2016/11/28 全球购物
Topshop美国官网:英国快速时尚品牌
2019/05/16 全球购物
JAVA的事件委托机制和垃圾回收机制
2014/09/07 面试题
SQL面试题
2013/12/09 面试题
会计实习生工作总结的自我评价
2013/10/07 职场文书
策划创业计划书
2014/02/06 职场文书
四年级科学教学反思
2014/02/10 职场文书
质量保证书怎么写
2015/02/27 职场文书
在CSS中映射鼠标位置并实现通过鼠标移动控制页面元素效果(实例代码)
2021/04/22 HTML / CSS
MySql 缓存查询原理与缓存监控和索引监控介绍
2021/07/02 MySQL