为什么在 PHP 7 中无法声明具有 static
返回类型的接口(interface)?
假设我有以下类(class):
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
我可以通过以下方式声明接口(interface):
public function plus(BigNumber $that) : BigNumber;
但这并不能强制执行上述内容。我想做的是:
public function plus(BigNumber $that) : static;
但迄今为止,PHP 7 对此并不满意:
PHP Parse error: syntax error, unexpected 'static' (T_STATIC)
这是否有特定原因,或者这是一个应该报告的错误?
最佳答案
2020年更新
静态返回类型 have been introduced在 PHP 8 中。
关于php - PHP 7 接口(interface)中的静态返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30952876/