详解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 相关文章推荐
session 的生命周期是多长
Oct 09 PHP
php中对xml读取的相关函数的介绍一
Jun 05 PHP
gd库图片下载类实现下载网页所有图片的php代码
Aug 20 PHP
php之readdir函数用法实例
Nov 13 PHP
php实现事件监听与触发的方法
Nov 21 PHP
php实现TCP端口检测的方法
Apr 01 PHP
windows下安装php的memcache模块的方法
Apr 07 PHP
Symfony2在Nginx下的配置方法图文教程
Feb 04 PHP
PHP程序中的文件锁、互斥锁、读写锁使用技巧解析
Mar 21 PHP
Yii框架批量插入数据扩展类的简单实现方法
May 23 PHP
PHP流Streams、包装器wrapper概念与用法实例详解
Nov 17 PHP
php引用和拷贝的区别知识点总结
Sep 23 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/12/13 PHP
PHP与MySQL开发的8个技巧小结
2010/12/17 PHP
利用PHP扩展vld查看PHP opcode操作步骤
2013/03/04 PHP
thinkphp视图模型查询提示ERR: 1146:Table 'db.pr_order_view' doesn't exist的解决方法
2014/10/30 PHP
Laravel5中防止XSS跨站攻击的方法
2016/10/10 PHP
加载jQuery后$冲突的解决办法
2010/07/09 Javascript
JQUERY的属性选择符和自定义选择符使用方法(二)
2011/04/07 Javascript
JavaScript高级程序设计 读书笔记之十 本地对象Date日期
2012/02/27 Javascript
js中对象的声明方式以及数组的一些用法示例
2013/12/11 Javascript
js+div实现图片滚动效果代码
2014/02/10 Javascript
node.js中的fs.utimesSync方法使用说明
2014/12/15 Javascript
JavaScript对HTML DOM使用EventListener进行操作
2015/10/21 Javascript
jQuery获取单击节点对象的方法
2016/06/02 Javascript
Vue.js动态组件解析
2016/09/09 Javascript
jQuery实现checkbox列表的全选、反选功能
2016/11/24 Javascript
bootstrap滚动监控器使用方法解析
2017/01/13 Javascript
JS中input表单隐藏域及其使用方法
2017/02/13 Javascript
javascript闭包的使用之按钮切换功能
2018/08/30 Javascript
Vue商品控件与购物车联动效果的实例代码
2019/07/21 Javascript
layer插件实现在弹出层中弹出一警告提示并关闭弹出层的方法
2019/09/24 Javascript
JS document form表单元素操作完整示例
2020/01/13 Javascript
python模拟登录百度贴吧(百度贴吧登录)实例
2013/12/18 Python
Python中random模块生成随机数详解
2016/03/10 Python
Python判断文件和字符串编码类型的实例
2017/12/21 Python
Python模块搜索路径代码详解
2018/01/29 Python
Python列表推导式与生成器用法分析
2018/08/02 Python
Python实现繁?转为简体的方法示例
2018/12/18 Python
Python 多维List创建的问题小结
2019/01/18 Python
python 使用plt画图,去除图片四周的白边方法
2019/07/09 Python
python 五子棋如何获得鼠标点击坐标
2019/11/04 Python
Python Django view 两种return的实现方式
2020/03/16 Python
Clarria化妆品官方网站:购买天然和有机化妆品系列
2018/04/08 全球购物
车间主任岗位职责
2015/02/03 职场文书
大学自主招生自荐信(2016精选篇)
2016/01/28 职场文书
MySQL系列之十三 MySQL的复制
2021/07/02 MySQL
Python实现Matplotlib,Seaborn动态数据图
2022/05/06 Python