爲什麼在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中的類型; '靜態'不會 - 顯然,因爲它指的是當前的上下文,因此不能無變化。 –