作用:(1)判断一个对象是否是某个类的实例,(2)判断一个对象是否实现了某个接口。
第一种用法:
<php$obj = new A();
if ($obj instanceof A) {
echo 'A';
}
第二种用法:
<phpinterface 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() 的区别,请看代码:
<phpclass 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) 会得 objectint 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可以是类,也可以是接口
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)