Heim  >  Artikel  >  Backend-Entwicklung  >  Warum wurden abstrakte statische Klassenmethoden in PHP 5.2 abgeschafft?

Warum wurden abstrakte statische Klassenmethoden in PHP 5.2 abgeschafft?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-12 04:26:01300Durchsuche

Why Were Abstract Static Class Methods Abolished in PHP 5.2 ?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn