Dlaczego w PHP 7 nie jest możliwe zadeklarowanie interfejsu z typem zwracanym static
?statyczny typ powrotu w interfejsach PHP 7
Powiedzmy mam następujących klas:
interface BigNumber {
/**
* @param BigNumber $that
*
* @return static
*/
public function plus(BigNumber $that);
}
class BigInteger implements BigNumber { ... }
class BigDecimal implements BigNumber { ... }
Chcę wymusić typ zwracanej metody plus()
do static
, czyli:
BigInteger::plus()
musi zwrócićBigInteger
BigDecimal::plus()
musi zwrócićBigDecimal
mogę zadeklarować interfejs w następujący sposób:
public function plus(BigNumber $that) : BigNumber;
Ale to nie wymusza wyżej. Co chciałbym zrobić, to:
public function plus(BigNumber $that) : static;
Ale PHP 7, do tej pory nie jest z niego zadowolony:
PHP Parse error: syntax error, unexpected 'static' (T_STATIC)
Czy istnieje szczególny powód do tego, czy jest to błąd, który powinien być zgłaszane?
Nośnik typu, dlatego. Implementacje/nadpisywanie metod musi być zgodne z typem dokładnie w PHP; 'static' nie - oczywiście, ponieważ odnosi się do bieżącego kontekstu i dlatego nie może być inwarianctwem. –