在PHP7.1类型提示中,有没有可能缩小返回类型?
以下代码会导致致命错误Declaration of A::foo(): Obj must be compatible with IA::foo(): IObj
,即使缩小返回类型不会破坏继承类型原则:Obj实现了IObj,因此当返回Obj实例时,父类返回类型限制将始终得到满足。
interface IObj {}
class Obj implements IObj {}
interface IA {
function foo(): IObj;
}
class A implements IA {
function foo(): Obj {
return new Obj();
}
}
我是在做什么错误的事情吗,还是这是PHP的缺陷?