06月29, 2017

PHP Instanceof研究

描述

最近为了让新开发的项目更稳定,在数据类型上面做了很严格的控制,其中就用的了instanceof这个关键词。这货就是用来判断某个对象的示例是否是属于某个类或者某个类的子类,或者是否是某个接口的实现。 他的语法糖应该是这个样子的,输出的结果是bool类型

$obj instanceof $class

这样写可能不太好理解,下面给一个示例

class Parents{
    public function __construct(){

    }
}

$parent = new Parent();

if ( $parent instanceof Parents ) {
    echo 'parent变量是属于Parents这个类的';
}

有两点值得注意。首先,类名没有任何定界符(引号)。使用定界符将导致语法错误。其次,如果比较失败,脚本将退出执行。

应用场景

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
/*
 * 
 * opcode number: 138
 */
$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';

?>

The result:

Yes, it is

参考

本文链接:http://codepowers.com/post/php-instanceof.html

-- EOF --

Comments