instanceof接口在php中返回false

时间:2016-01-23 09:56:44

标签: php interface instanceof

我有以下问题。

我有以下结构:

Interface A {
public function test(); 
}

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

如果我在C级打电话:

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

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

1 个答案:

答案 0 :(得分:2)

您的示例应该返回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 {
    // ...
}