详解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中循环语句的用法介绍
Jan 30 PHP
php面向对象 字段的声明与使用
Jun 14 PHP
解析thinkphp中的M()与D()方法的区别
Jun 22 PHP
php读取图片内容并输出到浏览器的实现代码
Aug 08 PHP
PHP中使用addslashes函数转义的安全性原理分析
Nov 03 PHP
PHP中基本HTTP认证技巧分析
Mar 16 PHP
使用Huagepage和PGO来提升PHP7的执行性能
Nov 30 PHP
PHP中header函数的用法及其注意事项详解
Jun 13 PHP
Yii2中YiiBase自动加载类、引用文件方法分析(autoload)
Jul 25 PHP
PHP从尾到头打印链表实例讲解
Sep 27 PHP
PHP实现获取url地址中顶级域名的方法示例
Jun 05 PHP
PHP基于ip2long实现IP转换整形
Dec 11 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之密码加密的几种方式
2015/07/29 PHP
PHP数据库连接mysql与mysqli对比分析
2016/01/04 PHP
Zend Framework过滤器Zend_Filter用法详解
2016/12/09 PHP
Laravel框架中自定义模板指令总结
2017/12/17 PHP
jquery 简单应用示例总结
2013/08/09 Javascript
B/S模式项目中常用的javascript汇总
2013/12/17 Javascript
jQuery移除tr无效的解决方法(tr是动态添加)
2014/09/22 Javascript
JavaScript里实用的原生API汇总
2015/05/14 Javascript
jquery任意位置浮动固定层插件用法实例
2015/05/29 Javascript
JavaScript判断表单中多选框checkbox选中个数的方法
2015/08/17 Javascript
javascript闭包(Closure)用法实例简析
2015/11/30 Javascript
bootstrap-wysiwyg结合ajax实现图片上传实时刷新功能
2016/05/27 Javascript
vue.js中$watch的用法示例
2016/10/04 Javascript
Bootstrap复选框和单选按钮美化插件(推荐)
2016/11/23 Javascript
各种选择框jQuery的选中方法(实例讲解)
2017/06/27 jQuery
JavaScript重复元素处理方法分析【统计个数、计算、去重复等】
2017/12/14 Javascript
Angular6封装http请求的步骤详解
2018/08/13 Javascript
LayerClose弹窗关闭刷新方法
2018/08/17 Javascript
高性能js数组去重(12种方法,史上最全)
2019/12/21 Javascript
vue中的双向数据绑定原理与常见操作技巧详解
2020/03/16 Javascript
python time模块用法实例详解
2014/09/11 Python
python DataFrame获取行数、列数、索引及第几行第几列的值方法
2018/04/08 Python
Windows下PyCharm安装图文教程
2018/08/27 Python
Python中一般处理中文的几种方法
2019/03/06 Python
Python属性和内建属性实例解析
2020/01/14 Python
CSS3 input框的实现代码类似Google登录的动画效果
2020/08/04 HTML / CSS
Wedgwood英国官方网站:英式精致骨瓷餐具、礼品与生活精品,源于1759年
2019/09/02 全球购物
金讯Java笔试题目
2013/06/18 面试题
什么叫应用程序域?什么是受管制的代码?什么是强类型系统?什么是装箱和拆箱?
2016/08/13 面试题
办公室主任职责范文
2013/11/08 职场文书
学术会议邀请函范文
2014/01/22 职场文书
优秀护士先进事迹
2014/05/08 职场文书
大学国际贸易专业自荐信
2014/06/05 职场文书
律师函格式范本
2015/05/27 职场文书
Vue实现下拉加载更多
2021/05/09 Vue.js
vue2实现provide inject传递响应式
2021/05/21 Vue.js