我有以下问题。
我有以下结构:
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 :(得分: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 {
// ...
}