【发布时间】:2019-04-21 07:35:09
【问题描述】:
我有一个抽象类A,它由实现接口I的类B扩展。
abstract class A {
public function test(){
return $this->getX();
}
abstract protected function getX();
}
class B extends A implements I {
public function Test() {
$x = this->getX();
if (!$x instanceof I) {
throw new RuntimeException("not an instance of I");
}
}
public function getX() {
$aCoordinates = array('x' => 1, 'y' => 4, 'z' => 5);
return $aCoordinates;
}
}
interface I {}
RuntimeException 总是被抛出,尽管$x 是I 的一个实例。有人知道为什么会发生这种情况吗?
getX() 返回一个数组。 getX() 只是一个返回数组的函数的示例。
【问题讨论】:
-
如果我没看错的话,这里的$x会被设置为10,这不是I的实例,而只是一个普通的整数,对吧?
-
我已经更新了我的示例代码。实际上 $x 只是 getX() 的结果
-
getX 返回什么?不管它是什么,它也不是我的一个实例
-
@Jake 我们需要看看 getX() 返回什么来帮助你。
-
@Jake 如果 $x = getX(),因此 $x = 数组。数组不是您的接口的实例。这就是抛出异常的原因。
标签: php oop interface extends instanceof