OOP-Changelog

Hier werden Änderungen am OOP-Modell von PHP protokolliert. Beschreibungen und andere Hinweise zu diesen Features werden innerhalb der OOP-Modell-Dokumentation dargelegt.

Version Beschreibung
7.4.0 Geändert: es ist nun möglich eine Exception in __toString() zu werfen.
7.4.0 Hinzugefügt: Unterstützung für eingeschränkte Rückgabetypkovarianz und Parametertypkontravarianz. Vollständige Varianzunterstützung ist nur bei Verwendung von Autoloading verfügbar. Innerhalb einer einzelnen Datei sind nur nicht-zyklische Typreferenzen möglich.
7.4.0 Hinzugefügt: es ist nun möglich Klasseneigenschaften zu typisieren.
7.3.0 Inkompatibel: das Argument-Entpacken von Traversablen mit nicht-integer Schlüsseln wird nicht länger unterstützt. Dieses Verhalten war nicht beabsichtigt und wurde daher entfernt.
7.3.0 Inkompatibel: in früheren Version war es möglich statische Eigenschaften durch Referenzzuweisung zu separieren. Dies wurde entfernt.
7.3.0 Geändert: der instanceof-Operator erlaubt nun Literale als erster Operand, in welchem Fall das Ergebnis immer FALSE ist.
7.2.0 Missbilligt: die Funktion __autoload() wurde zugunsten von spl_autoload_register() missbilligt.
7.2.0 Geändert: der folgende Name kann nicht verwendet werden, um Klassen, Interfaces oder Traits zu benennen: object.
7.2.0 Geändert: der gruppierenden Use-Syntax für Namensräume kann nun ein abschließendes Komma angefügt werden.
7.2.0 Geändert: Parametertyp-Erweiterung. Parametertypen in übersteuerten Methoden und Interfaceimplementierungen können nun weggelassen werden.
7.2.0 Geändert: abstrakte Methoden können nun übersteuert werden, wenn eine abstrakte Klasse eine andere abstrakte Klasse erweitert.
7.1.0 Geändert: folgende Namen können nicht verwendet werden, um Klassen, Interfaces oder Traits zu benennen: void und iterable.
7.1.0 Hinzugefügt: es ist nun möglich die Sichtbarkeit von Klassenkonstanten anzugeben.
7.0.0 Missbilligt: statische Aufrufe von Methoden, die nicht als statisch deklariert wurden.
7.0.0 Missbilligt: Konstruktoren im Stil von PHP 4, d.h. Methoden, die denselben Namen wie die Klasse, in der sie definiert wurden, haben.
7.0.0 Hinzugefügt: gruppierte use Deklaration: Klassen, Funktionen und Konstanten, die aus demselben Namensraum importiert werden, können nun in einer einzigen use-Anweisung gruppiert werden.
7.0.0 Hinzugefügt: Unterstüzung für anonyme Klassen per new class wurde hinzugefügt.
7.0.0 Inkompatibel: die Iteration über ein nicht-Traversable object hat nun dasselbe Verahlten wie die Iteration über array-Referenzen.
7.0.0 Definieren (kompatibler) Eigenschaften in zwei verwendeten Traits erzeugt keinen Fehler mehr.
5.6.0 Hinzugefügt: die __debugInfo() Methode.
5.5.0 Hinzugefügt: die magische ::class Konstante.
5.5.0 finally zur Behandlung von Exceptions hinzugefügt.
5.4.0 Traits hinzugefügt.
5.4.0 Geändert: Wenn eine abstrakte Klasse eine Signatur für den Konstruktor definiert, so wird diese nun erzwungen.
5.3.3 Geändert: Methoden, die den Namen des letzten Elementes eines Klassennamens in einem Namespace tragen, werden nicht länger als Konstruktor behandelt. Diese Änderung beeinflusst Klassen außerhalb von Namespaces nicht.
5.3.0 Geändert: Klassen, die Interfaces implementieren, welche Methoden mit Vorgabewerten in ihrem Prototypen enthalten müssen nicht mehr dem Vorgabewert des Interfaces entsprechen.
5.3.0 Geändert: Es ist nun möglich eine Klasse mittels einer Variablen zu referenzieren (z.B. echo $classname::constant;). Der Wert der Variable darf kein Schlüsselwort sein (z.B. self, parent oder static).
5.3.0 Geändert: Ein Fehler der Stufe E_WARNING wird ausgelöst, wenn die magischen Methoden für Überladung als static deklariert werden. Dies erzwingt auch die Anforderung nach öffentlicher Sichtbarkeit.
5.3.0 Geändert: Vor PHP 5.3.0 konnten Exceptions, die in einer __autoload()-Funktion geworfen wurden, nicht mit einem catch-Block gefangen werden und resultierten in einem "fatal error". Nun können Exceptions, die in einer __autoload-Funktion geworfen wurden, im catch-Block unter einer Bedingung gefangen werden. Wenn eine selbst definierte Exception geworfen wird, so muss diese Exception verfügbar sein. Die __autoload-Funktion kann jedoch rekursiv aufgerufen werden, um die Exceptionklasse automatisch zu laden.
5.3.0 Hinzugefügt: Die Methode __callStatic.
5.3.0 Hinzugefügt: Unterstützung für die heredoc- und nowdoc-Syntax für const und Definition von Eigenschaften in einer Klasse. Beachten Sie: die heredoc-Werte müssen den gleichen Regeln wie Strings in doppelten Anführungszeichen folgen (d.h. keine Variablen beinhalten).
5.3.0 Hinzugefügt: Späte statische Bindung.
5.3.0 Hinzugefügt: Die Methode __invoke.
5.2.0 Geändert: Die Methode __toString wurde nur in direkter Verbindung mit echo oder print aufgerufen. Nun wird sie in jedem string-Kontext aufgerufen (z.B. in printf() mit dem %s-Modifizierer), aber nicht in anderen Kontexten (z.B. mit dem %d-Modifizierer). Von PHP 5.2.0 an löst die Konvertierung von objecten ohne __toString-Methode zu string einen Fehler der Stufe E_RECOVERABLE_ERROR aus.
5.1.3 Geändert: In vorhergehenden Versionen von PHP 5 wurde die Verwendung von var als veraltet betrachtet und löste einen Fehler der Stufe E_STRICT aus. Dies ist nicht länger veraltet und daher wird kein Fehler mehr ausgelöst.
5.1.0 Geändert: Die statische Methode __set_state wird nun für Klassen aufgerufen, wenn sie durch var_export() exportiert werden.
5.1.0 Hinzugefügt: Die Methoden __isset und __unset.