php中 instanceof有啥用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php中 instanceof有啥用相关的知识,希望对你有一定的参考价值。

例如下面这个代码,是检查是否被继承吗
<?php
interface Drive
public function back();
public function go();

class Car implements Drive
public function go()
echo "我开车往前走";

public function back()
echo"我开车往回走";


class Bike implements Drive
public function go()
echo "我往前骑车";

public function back()
echo "我往回骑车";


function goForward($obj)
if($obj instanceof Drive)
$obj->back();


$tool1=new Car();
$tool2=new Bike();
goForward($tool2);

作用:(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)

参考技术A "instanceof"操作符的使用非常简单,它用两个参数来完成其功能。
第一个参数是你想要检查的对象,第二个参数是类名(事实上是一个接口名),用于确定是否这个对象是相应类的一个实例。它的基本语法如下:

if (object instanceof class name)//继承关系
//
本回答被提问者采纳
参考技术B instanceof
用来检测一个给定的对象是否属于(继承于)某个类(class)、某个类的子类、某个接口(interface)。如果是则返回true。
参考技术C 用来判断继承关系的 参考技术D 接口的应用

以上是关于php中 instanceof有啥用的主要内容,如果未能解决你的问题,请参考以下文章

接口有啥用,还是要自己写代码啊

PHP 嵌套函数有啥用?

php中ob_start()有啥用?

PHP 函数重载有啥用?

PHP 5.2 的 DateTime::diff() 有啥用?

PHP DOM Manipulation 有啥用?