详解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 相关文章推荐
一个很方便的 XML 类!!原创的噢
Oct 09 PHP
PHP如何透过ODBC来存取数据库
Oct 09 PHP
ob_start(),ob_start('ob_gzhandler')使用
Dec 25 PHP
php 生成静态页面的办法与实现代码详细版
Feb 15 PHP
PHP技术开发技巧分享
Mar 23 PHP
php 编写安全的代码时容易犯的错误小结
May 20 PHP
PHP中获取变量的变量名的一段代码的bug分析
Jul 07 PHP
php多次include后导致全局变量global失效的解决方法
Feb 28 PHP
thinkPHP+phpexcel实现excel报表输出功能示例
Jun 06 PHP
PHP实现模拟http请求的方法分析
Dec 20 PHP
PHP使用正则表达式实现过滤非法字符串功能示例
Jun 04 PHP
详解php伪造Referer请求反盗链资源
Jan 24 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
linux使用crontab实现PHP执行计划定时任务
2014/05/10 PHP
php中Y2K38的漏洞解决方法实例分析
2014/09/22 PHP
Laravel 5框架学习之路由、控制器和视图简介
2015/04/07 PHP
详解PHP中的状态模式编程
2015/08/11 PHP
PHP中的Iterator迭代对象属性详解
2019/04/12 PHP
JavaScript中通过闭包解决只能取得包含函数中任何变量最后一个值的问题
2010/08/12 Javascript
javascript中自定义对象的属性方法分享
2013/07/12 Javascript
Knockout数组(observable)使用详解示例
2013/11/15 Javascript
JavaScript中操作字符串之localeCompare()方法的使用
2015/06/06 Javascript
js实现瀑布流的三种方式比较
2020/06/28 Javascript
浅谈如何实现easyui的datebox格式化
2016/06/12 Javascript
JS实现动态表格的添加,修改,删除功能(推荐)
2016/06/15 Javascript
原生Javascript和jQuery做轮播图简单例子
2016/10/11 Javascript
Bootstrap基本组件学习笔记之列表组(11)
2016/12/07 Javascript
JScript实现表格的简单操作
2017/08/15 Javascript
vue 解决循环引用组件报错的问题
2018/09/06 Javascript
关于ckeditor在bootstrap中modal中弹框无法输入的解决方法
2019/09/11 Javascript
react实现复选框全选和反选组件效果
2020/08/25 Javascript
vue穿梭框实现上下移动
2021/01/29 Vue.js
[37:50]VP vs TNC Supermajor小组赛B组 BO3 第一场 6.2
2018/06/03 DOTA
python开发之文件操作用法实例
2015/11/13 Python
Python之日期与时间处理模块(date和datetime)
2017/02/16 Python
python学习教程之Numpy和Pandas的使用
2017/09/11 Python
python 分离文件名和路径以及分离文件名和后缀的方法
2018/10/21 Python
django删除表重建的实现方法
2019/08/28 Python
numpy np.newaxis 的实用分享
2019/11/30 Python
opencv3/Python 稠密光流calcOpticalFlowFarneback详解
2019/12/11 Python
在python中求分布函数相关的包实例
2020/04/15 Python
用python实现一个简单计算器(完整DEMO)
2020/10/14 Python
python爬虫scrapy图书分类实例讲解
2020/11/23 Python
小学家长会邀请函
2014/01/23 职场文书
农村婚庆司仪主持词
2014/03/15 职场文书
原料仓仓管员岗位职责
2014/07/08 职场文书
2014年度培训工作总结
2014/11/27 职场文书
2015年调度员工作总结
2015/04/30 职场文书
vue实现Toast组件轻提示
2022/04/10 Vue.js