statischer Rückgabetyp in PHP 7-Schnittstellen
Warum ist es in PHP 7 nicht möglich, eine Schnittstelle mit einem @ zu deklarierstatic
Rückgabetyp?
Sagen wir, ich habe die folgenden Klassen:
interface BigNumber {
/**
* @param BigNumber $that
*
* @return static
*/
public function plus(BigNumber $that);
}
class BigInteger implements BigNumber { ... }
class BigDecimal implements BigNumber { ... }
Ich möchte den Rückgabetyp des @ erzwingplus()
Methode zustatic
, das ist
BigInteger::plus()
muss ein @ zurückgebBigInteger
BigDecimal::plus()
muss ein @ zurückgebBigDecimal
Ich kann die Schnittstelle folgendermaßen deklarieren:
public function plus(BigNumber $that) : BigNumber;
Aber das erzwingt das oben nicht. Was ich gerne machen würde ist:
public function plus(BigNumber $that) : static;
Aber PHP 7 ist bisher nicht zufrieden damit:
PHP Parse-Fehler: Syntaxfehler, unerwartetes 'statisches' (T_STATIC)
Gibt es einen bestimmten Grund dafür, oder ist dies ein Fehler, der gemeldet werden sollte?