PHPs Abschaffung abstrakter statischer Klassenmethoden in 5.2
In PHP 5.2 und höher ist die Verwendung abstrakter statischer Methoden innerhalb von Klassen verboten. Diese Entscheidung ist auf eine Kombination aus Versehen, Designfehlern und einem Missverständnis des Schlüsselworts self zurückzuführen.
Der problematische Kontext
Anfangs wurden PHP 5.0x und 5.1x fälschlicherweise verwendet erlaubte die Deklaration abstrakter statischer Funktionen innerhalb von Klassen. Dies war jedoch nutzlos, da keine späten statischen Bindungen vorhanden waren. Infolgedessen würde Code wie der folgende fehlschlagen:
abstract class ParentClass { static function foo() { self::bar(); } abstract static function bar(); } class ChildClass extends ParentClass { static function bar() { echo "Hello, World!"; } } ChildClass::foo();
In diesem Beispiel verweist der self::bar()-Aufruf in foo() auf die bar()-Methode in ParentClass, selbst wenn foo( ) wird als Methode von ChildClass aufgerufen. Folglich generiert der Code einen schwerwiegenden Fehler, der darauf hinweist, dass die abstrakte Methode ParentClass::bar() nicht aufgerufen werden kann.
Die Begründung für die Warnung
Angesichts dieser Einschränkung , PHP 5.2 hat zu Recht eine Warnung herausgegeben, um von der Verwendung abstrakter statischer Methoden abzuraten. Da sie keinem praktischen Zweck dienten, war jede Verwendung wahrscheinlich auf ein Missverständnis zurückzuführen und wurde daher als schlechter Code angesehen.
Das Missverständnis wurde behoben
PHP 5.3 führte späte statische Bindungen ein. Zulassen, dass Methoden in übergeordneten Klassen auf statische Methoden in untergeordneten Klassen zugreifen. Mit diesem Zusatz wurde der Grund für das Verbot abstrakter statischer Methoden weniger überzeugend. Die Warnung blieb jedoch bestehen, da ein schwaches Argument vorgebracht wurde, dass die Offenlegung defekter statischer Methoden problematisch sein könnte.
Der Fehler und seine Lösung
Leider kam es zu einem Missverständnis von Rasmus Lerdorf, Der Ersteller von PHP führte dazu, dass irrtümlicherweise ein Fehlerbericht geschlossen wurde, in dem die Entfernung der Warnung gefordert wurde. Anschließend blieb die Warnung trotz fehlender stichhaltiger Begründung bestehen.
Die Zukunft abstrakter statischer Methoden
Glücklicherweise hat PHP 7 die Warnung endlich entfernt, da Im RFC vorgeschlagen: E_STRICT-Hinweise neu klassifizieren. Durch die Abschaffung können Entwickler wieder abstrakte statische Methoden verwenden, ohne auf falsche Warnungen zu stoßen.
Das obige ist der detaillierte Inhalt vonWarum wurden abstrakte statische Klassenmethoden in PHP 5.2 abgeschafft?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!