详解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二分法在IP地址查询中的应用
Aug 12 PHP
php下批量挂马和批量清马代码
Feb 27 PHP
codeigniter数据库操作函数汇总
Jun 12 PHP
PHP中feof()函数实例测试
Aug 23 PHP
PHP入门教程之使用Mysqli操作数据库的方法(连接,查询,事务回滚等)
Sep 11 PHP
laravel中命名路由的使用方法
Feb 24 PHP
php session的应用详细介绍
Mar 22 PHP
php将html转为图片的实现方法
May 19 PHP
深入理解PHP的远程多会话调试
Sep 21 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
Dec 21 PHP
PHP小程序支付功能完整版【基于thinkPHP】
Mar 26 PHP
php 多个变量指向同一个引用($b = &amp;$a)用法分析
Nov 13 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
德生BCL3000的电路分析和打磨
2021/03/02 无线电
开启CURL扩展,让服务器支持PHP curl函数(远程采集)
2011/03/19 PHP
php中一个完整表单处理实现代码
2011/11/10 PHP
phpmyadmin出现Cannot start session without errors问题解决方法
2014/08/14 PHP
PHP中SimpleXML函数用法分析
2014/11/26 PHP
PHP调试函数和日志记录函数分享
2015/01/31 PHP
WordPress中邮件的一些修改和自定义技巧
2015/12/15 PHP
Laravel使用memcached缓存对文章增删改查进行优化的方法
2016/10/08 PHP
php set_include_path函数设置 include_path 配置选项
2016/10/30 PHP
浅谈PHP的数据库接口和技术
2016/12/09 PHP
Thinkphp 框架扩展之标签库驱动原理与用法分析
2020/04/23 PHP
封装了一个js图片轮换效果的函数
2011/09/28 Javascript
Json对象与Json字符串互转(4种转换方式)
2013/03/27 Javascript
thinkphp中常用的系统常量和系统变量
2014/03/05 Javascript
JavaScript实现的内存数据库LokiJS介绍和入门实例
2014/11/17 Javascript
用nodejs的实现原理和搭建服务器(动态)
2016/08/10 NodeJs
Json对象和字符串互相转换json数据拼接和JSON使用方式详细介绍(小结)
2016/10/25 Javascript
JavaScript编写九九乘法表(两种任选)
2017/02/04 Javascript
js操作二进制数据方法
2018/03/03 Javascript
ES6中的迭代器、Generator函数及Generator函数的异步操作方法
2019/05/12 Javascript
解决layer.confirm快速点击会重复触发事件的问题
2019/09/23 Javascript
详解element-ui 表单校验 Rules 配置 常用黑科技
2020/07/11 Javascript
解决VUE项目使用Element-ui 下拉组件的验证失效问题
2020/11/07 Javascript
[03:17]DOTA2-DPC中国联赛1月29日Recap集锦
2021/03/11 DOTA
python使用urllib模块开发的多线程豆瓣小站mp3下载器
2014/01/16 Python
分析在Python中何种情况下需要使用断言
2015/04/01 Python
python利用装饰器进行运算的实例分析
2015/08/04 Python
关于Python元祖,列表,字典,集合的比较
2017/01/06 Python
使用Python爬取最好大学网大学排名
2018/02/24 Python
Python图像处理实现两幅图像合成一幅图像的方法【测试可用】
2019/01/04 Python
如何用Python做一个微信机器人自动拉群
2019/07/03 Python
python 利用turtle模块画出没有角的方格
2019/11/23 Python
python对指定字符串逆序的6种方法(小结)
2020/04/02 Python
挂靠协议书范本
2014/04/22 职场文书
高等教育学专业自荐书
2014/06/17 职场文书
Python anaconda安装库命令详解
2021/10/16 Python