2016-01-23 120 views
1

我有以下问题。instanceof接口返回false在PHP

我以下结构:

Interface A { 
public function test(); 
} 

class B implements A { 
    public function test() { 
    return $something; 
} 
} 

,如果我在C类此事致电:

$someBclass = new B(); 
if ($someBclass instanceOf A) 

从条件我得到了假的。有没有可能检查b类是否是接口A的实例?谢谢

+0

类不是接口的实例,但实现它们: [php:class_implements](http://php.net/manual/de/function.class-implements.php) –

+0

应返回一个真正的 - [演示](https://3v4l.org/3XDOo),并参见[PHP文档中的示例#4](http://php.net/manual/en/language.operators.type.php) –

+0

看看这个其他答案:http://stackoverflow.com/questions/274360/checking-if-an-instances-class-implements-an-interface它可以帮助你。 –

回答

0

你的例子应该返回true,我认为你正在测试另一个文件的接口,并且你的类缺少use A;C
此外,你必须使用完整的命名空间来检查你的类是否是你的接口的一个实例。

如果你有一个这样的接口:

namespace MyNamespace; 

Interface A { 
    public function test(); 
} 

B类是这样的:

namespace MyNamespace; 

class B implements A { 
    public function test() { 
    return $something; 
}  

而且你的C类是这样的:

namespace MyNamespace\Util; 

class C { 
    // ... 
    $someBclass = new B(); 

    if ($someClassB instanceof A){ 
     die('InstanceOf'); 
    } else { 
     die('Not instanceOf'); 
    } 
    // Output: Not instanceOf 

    if ($someClassB instanceof \MyNamespace\A){ 
     die('InstanceOf'); 
    } 
    // Output: InstanceOf; 

    // ... 
} 

或者你可以添加use声明:

namespace MyNamespace\Util; 

use MyNamespace\A; 

class C { 
    // ... 
}