详解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 相关文章推荐
apache+mysql+php+ssl服务器之完全安装攻略
Sep 05 PHP
十天学会php之第三天
Oct 09 PHP
关于时间计算的结总
Dec 06 PHP
PHP小技巧搜集,每个PHPer都来露一手
Jan 02 PHP
谈谈PHP的输入输出流
Feb 14 PHP
使用php重新实现PHP脚本引擎内置函数
Mar 06 PHP
PHP5 面向对象程序设计
Feb 13 PHP
php数据库连接时容易出错的特殊符号问题
Sep 01 PHP
php mysql_real_escape_string函数用法与实例教程
Sep 30 PHP
PHP+MySQL修改记录的方法
Jan 21 PHP
PHP实现将MySQL重复ID二维数组重组为三维数组的方法
Aug 01 PHP
浅谈PHP的反射机制
Dec 15 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获取数组最后一个值的2种方法
2015/01/21 PHP
php实现无限级分类(递归方法)
2015/08/06 PHP
highchart数据源纵轴json内的值必须是int(详解)
2017/02/20 PHP
Thinkphp5 自定义上传文件名的实现方法
2019/07/23 PHP
jQuery 判断页面元素是否存在的代码
2009/08/14 Javascript
jQuery中与toggleClass等价的程序段 以及未来学习的方向
2010/03/18 Javascript
两种简单实现菜单高亮显示的JS类代码
2010/06/27 Javascript
基于jquery实现的一个选择中国大学的弹框 (数据、步骤、代码)
2012/07/26 Javascript
用jquery等比例控制图片宽高的具体实现
2014/01/28 Javascript
javascript数组详解
2014/10/22 Javascript
javascript使用shift+click实现选择和反选checkbox的方法
2015/05/04 Javascript
JavaScript中数组去除重复的三种方法
2016/04/22 Javascript
JavaScript实现的微信二维码图片生成器的示例
2016/10/26 Javascript
浅谈js之字面量、对象字面量的访问、关键字in的用法
2016/11/20 Javascript
详解bootstrap的modal-remote两种加载方式【强化】
2017/01/27 Javascript
node Buffer缓存区常见操作示例
2019/05/04 Javascript
JavaScript利用键盘码控制div移动
2020/03/19 Javascript
解决vue.js中settimeout遇到的问题(时间参数短效果不稳定)
2020/07/21 Javascript
design vue 表格开启列排序的操作
2020/10/28 Javascript
[01:48]2018DOTA2亚洲邀请赛主赛事第二日五佳镜头 VG完美团战逆转TNC
2018/04/05 DOTA
Python模块搜索概念介绍及模块安装方法介绍
2015/06/03 Python
Python中线程的MQ消息队列实现以及消息队列的优点解析
2016/06/29 Python
Python正则表达式教程之二:捕获篇
2017/03/02 Python
python获取指定字符串中重复模式最高的字符串方法
2018/06/29 Python
python requests post多层字典的方法
2018/12/27 Python
解决tensorboard多个events文件显示紊乱的问题
2020/02/15 Python
Python错误的处理方法
2020/06/23 Python
HTML中fieldset标签概述及使用方法
2013/02/01 HTML / CSS
Wedgwood英国官方网站:英式精致骨瓷餐具、礼品与生活精品,源于1759年
2019/09/02 全球购物
CHARLES & KEITH加拿大官网:新加坡时尚品牌
2020/03/26 全球购物
几道Java和数据库的面试题
2013/05/30 面试题
服务员自我评价
2014/01/25 职场文书
员工三分钟演讲稿
2014/08/19 职场文书
铅球加油稿100字
2014/09/26 职场文书
黄埔军校观后感
2015/06/10 职场文书
学习弘扬焦裕禄精神心得体会
2016/01/23 职场文书