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 | 
|---|---|
| 8.4.0 | Hinzugefügt: Unterstützung für Eigenschafts-Hooks. | 
| 8.4.0 | Hinzugefügt: Unterstützung für Verzögerte Initialisierung (Lazy Objects). | 
| 8.1.0 | Hinzugefügt: Unterstützung für den Modifikator final für Klassenkonstanten. Außerdem werden Schnittstellenkonstanten standardmäßig überschreibbar. | 
| 8.0.0 | Hinzugefügt: Unterstützung für den nullsafe-Operator ?-> für den Zugriff auf Eigenschaften und Methoden von Objekten, die null sein können. | 
| 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 falseist. | 
| 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: voidunditerable. | 
| 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ützung für anonyme Klassen
       per new classwurde hinzugefügt. | 
| 7.0.0 | Inkompatibel: die Iteration über ein nicht-Traversable Objekt hat nun dasselbe Verhalten 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,parentoderstatic). | 
| 5.3.0 | Geändert: Ein Fehler der Stufe E_WARNINGwird
       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 Objekten ohne __toString-Methode zu
       String einen Fehler der StufeE_RECOVERABLE_ERRORaus. | 
| 5.1.3 | Geändert: In vorhergehenden Versionen von PHP 5 wurde die Verwendung
       von varals veraltet betrachtet und löste einen
       Fehler der StufeE_STRICTaus. 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. | 
