Warum ist es in PHP 7 nicht möglich, eine Schnittstelle mit einem Rückgabetyp static
zu deklarieren?statische Rückgabetyp in PHP 7 Schnittstellen
Lassen Sie uns sagen, 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 den Rückgabetyp der plus()
Methode static
erzwingen möchten, das heißt:
BigInteger::plus()
müssenBigInteger
zurückkehrenBigDecimal::plus()
muss eineBigDecimal
zurückgeben
ich die Schnittstelle auf folgende Weise erklären können:
public function plus(BigNumber $that) : BigNumber;
aber, dass die oben nicht erzwingen ist. Was würde Ich mag zu tun ist:
public function plus(BigNumber $that) : static;
Aber PHP 7 bis heute nicht mit ihm glücklich ist:
PHP Parse error: syntax error, unexpected 'static' (T_STATIC)
Gibt es einen bestimmten Grund dafür, oder ist dies ein Fehler, der sollte gemeldet werden?
Typ Invarianz, deshalb. Implementierungen/überschreibende Methoden müssen genau dem Typ in PHP entsprechen; "Statisch" ist nicht - offensichtlich, weil es sich auf den aktuellen Kontext bezieht und daher nicht invariant sein kann. –