Warum der strikte Modus von PHP abstrakte statische Klassenmethoden nicht zulässt
In PHP 5.2 würde die Aktivierung strenger Warnungen Warnungen für abstrakte statische Klassenmethoden auslösen. Diese Einschränkung wurde implementiert, weil PHP 5.0.x und 5.1.x solche Methoden fälschlicherweise zuließen, mit der Absicht, sie in späteren Versionen nicht mehr zuzulassen.
Das Problem mit abstrakten statischen Methoden in PHP 5.2
Das Problem ergibt sich aus dem Verhalten später statischer Bindungen, die erst mit PHP 5.3 eingeführt wurden. In PHP 5.2 würde Code wie im folgenden Beispiel nicht wie vorgesehen funktionieren:
abstract class ParentClass { static function foo() { echo "I'm gonna do bar()"; self::bar(); } abstract static function bar(); } class ChildClass extends ParentClass { static function bar() { echo "Hello, World!"; } } ChildClass::foo();
In diesem Fall würde self::bar() explizit auf die bar()-Methode in ParentClass verweisen, selbst wenn foo( ) wurde als Methode von ChildClass aufgerufen. Dies machte abstrakte statische Methoden in PHP 5.2 nutzlos, da der Sinn abstrakter Methoden darin besteht, unterschiedliche Implementierungen in untergeordneten Klassen zu ermöglichen.
Der Mangel an Rechtfertigung nach PHP 5.3
Mit der Einführung später statischer Bindungen in PHP 5.3 wurde das Hauptargument gegen abstrakte statische Methoden beseitigt. Im obigen Beispiel könnte jetzt Static::bar() anstelle von self::bar() verwendet werden, sodass in einer übergeordneten Klasse definierte Methoden statische Methoden in untergeordneten Klassen aufrufen können.
Die Persistenz von die Warnung
Trotz der Einführung später statischer Bindungen blieb die Warnung für abstrakte statische Methoden in PHP bestehen. Der PHP-Fehlerbericht 53081, der seine Entfernung forderte, wurde aufgrund eines Missverständnisses von Rasmus Lerdorf, dem Erfinder von PHP, fälschlicherweise als „falsch“ geschlossen.
Die Lösung in PHP 7
Schließlich wurde die Warnung in PHP 7 entfernt. PHP RFC: E_STRICT-Hinweise neu klassifizieren hat es als Hinweis neu klassifiziert und löst im strikten Modus keinen Fehler mehr aus. Diese Änderung erkennt die Nützlichkeit und Gültigkeit abstrakter statischer Methoden an.
Das obige ist der detaillierte Inhalt vonWarum hat PHP abstrakte statische Klassenmethoden im strikten Modus nicht zugelassen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!