php中 instanceof有什么用

php中 instanceof有什么用,第1张

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

一般instanceof用在未知类型(比如Object)之间的比较。由于b显式定义为class A,而A与B之间显式没有继承关系,所以,编译器会报错。你把A b= new A();改成Object b = new A();就行了

nstanceof和typeof都能用来判断一个变量是否为空或是什么类型的变量。
typeof用以获取一个变量的类型,typeof一般只能返回如下几个结果:number,boolean,string,function,object,undefined。我们可以使用typeof来获取一个变量是否存在,如if(typeof a!="undefined"){},而不要去使用if(a)因为如果a不存在(未声明)则会出错,对于Array,Null等特殊对象使用typeof一律返回object,这正是typeof的局限性。 如果我们希望获取一个对象是否是数组,或判断某个变量是否是某个对象的实例则要选择使用instanceof。instanceof用于判断一个变量是否某个对象的实例,如var a=new Array();alert(a instanceof Array);会返回true,同时alert(a instanceof Object)也会返回true;这是因为Array是object的子类。再如:function test(){};var a=new test();alert(a instanceof test)会返回true。 谈到instanceof我们要多插入一个问题,就是function的arguments,我们大家也许都认为arguments是一个Array,但如果使用instaceof去测试会发现arguments不是一个Array对象,尽管看起来很像。另外:测试 var a=new Array();if (a instanceof Object) alert('Y');else alert('N');
得'Y’但 if (window instanceof Object) alert('Y');else alert('N');得'N'所以,这里的instanceof测试的object是指js语法中的object,不是指dom模型对象。使用typeof会有些区别
alert(typeof(window) 会得 object

int boolean 是值数据类型
而instanceof 只能 用于 对象 类型
例如
正确:
Integer i;
if(i instanceof Integer)
Systemoutprintln("i 是 Integer类型");
错误:
int i;
if(i instanceof int)
Systemoutprintln("i 是 int类型");

==
如数是基础数值类型,
表示值是否相等
如果是对象,表示这两个对象的引用是否相等(即:是否指向同一块内存)
instanceof
:
a
instanceof
b
表示a是否是b的子类,其中b可以是类,也可以是接口


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12889009.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-28
下一篇 2023-05-28

发表评论

登录后才能评论

评论列表(0条)

保存