Heim >Backend-Entwicklung >PHP-Tutorial >Warum waren statische abstrakte Methoden in PHP 5.2 nicht zulässig und was hat sich in späteren Versionen geändert?

Warum waren statische abstrakte Methoden in PHP 5.2 nicht zulässig und was hat sich in späteren Versionen geändert?

Susan Sarandon
Susan SarandonOriginal
2024-11-14 12:57:021024Durchsuche

Why Were Static Abstract Methods Disallowed in PHP 5.2 and What Changed in Later Versions?

Warum statische abstrakte Methoden in PHP 5.2 nicht zulässig waren

In PHP 5.2 führte die Einführung strenger Warnungen zu einer Flut von Standardwarnungen im Zusammenhang um statische Klassenmethoden zu abstrahieren. Diese Änderung löste die Frage aus: Warum sollte PHP keine abstrakten statischen Funktionen zulassen?

Der Grund für das Verbot

Anfänglich war das Verbot abstrakter statischer Methoden in PHP 5.2 war auf das Fehlen später statischer Bindungen zurückzuführen. Zu diesem Zeitpunkt verhielt sich Code wie der folgende nicht wie erwartet:

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();

Selbst wenn er als Methode der untergeordneten Klasse aufgerufen wurde, verwies der Aufruf self::bar() auf die Methode bar() der ParentClass. Ohne späte statische Bindungen machte diese Einschränkung abstrakte statische Methoden im Wesentlichen nutzlos.

Die Hinzufügung später statischer Bindungen

Mit der Einführung von PHP 5.3 erlaubte das Schlüsselwort static Methoden in übergeordneten Klassen, um statische Methoden in untergeordneten Klassen aufzurufen. Dies öffnete die Tür für einen sinnvollen Einsatz abstrakter statischer Methoden. Späte statische Bindungen beseitigten die vorherige Einschränkung und machten statische abstrakte Methoden möglich.

Die fehlerhafte Begründung

Trotz der Einführung später statischer Bindungen blieb die Warnung vor abstrakten statischen Funktionen bestehen . Das vorgebrachte Argument war, dass der Aufruf von ParentClass::foo() eine defekte ParentClass::bar()-Methode offenlegen könnte. Dieses Problem konnte jedoch gelöst werden, indem sichergestellt wurde, dass abstrakte Klassen nicht instanziiert wurden.

Die fehlerhafte Entscheidung

Trotz der fehlerhaften Begründung blieb die Warnung in PHP bestehen. Ein PHP-Fehlerbericht, der seine Entfernung forderte, wurde fälschlicherweise als „falsch“ geschlossen. Diese fehlerhafte Entscheidung hat dazu geführt, dass die Warnung bestehen bleibt, sehr zum Frust der Entwickler.

Die Zukunft statischer abstrakter Methoden

Glücklicherweise wird die Warnung entfernt in PHP 7. Diese Änderung wird PHP an moderne objektorientierte Programmierpraktiken anpassen und es Entwicklern ermöglichen, abstrakte statische Methoden ohne unnötige Warnungen zu verwenden. Entwickler müssen sich nicht länger mit der Verwirrung herumschlagen, die durch die fehlerhafte Entscheidung in PHP 5.2 verursacht wurde.

Das obige ist der detaillierte Inhalt vonWarum waren statische abstrakte Methoden in PHP 5.2 nicht zulässig und was hat sich in späteren Versionen geändert?. 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