为什么在PHP 7中无法声明带有static
返回类型的界面?PHP 7界面中的静态返回类型
比方说,我有以下类别:
interface BigNumber {
/**
* @param BigNumber $that
*
* @return static
*/
public function plus(BigNumber $that);
}
class BigInteger implements BigNumber { ... }
class BigDecimal implements BigNumber { ... }
我想执行plus()
方法的返回类型为static
,那就是:
BigInteger::plus()
必须返回BigInteger
BigDecimal::plus()
必须返回BigDecimal
我可以声明接口通过以下方式:
public function plus(BigNumber $that) : BigNumber;
但是,这并不执行上述。我想这样做的是:
public function plus(BigNumber $that) : static;
但是PHP 7,到目前为止,是不满意的话:
PHP Parse error: syntax error, unexpected 'static' (T_STATIC)
是否有此特殊原因,或者这是一个错误,应该被报道?
类型不变性,这就是为什么。实现/重写方法必须完全匹配PHP中的类型; '静态'不会 - 显然,因为它指的是当前的上下文,因此不能无变化。 –