ami*_*mik 6 php type-hinting php-7.1
是否有可能在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();
}
}
Run Code Online (Sandbox Code Playgroud)
我做错了什么,或者这是PHP的缺点?
Obj implements IObj就PHP而言,无法保证.因为您可以随时将声明移动Obj到其他文件中,并且由于文件是在运行时加载而不是在某些编译步骤中加载的,因此完全不知道Obj将在运行时加载什么实现以及是否会加载implements IObj.
所以,不,你不能在实现中更改返回类型,因为所有类型安全都会消失.如果您预先编译了预先准确确定的代码,则只能保证类型安全Obj.
| 归档时间: |
|
| 查看次数: |
327 次 |
| 最近记录: |