Das neuste major release PHP 8.3 ist erschienen und wir konnten die finale Version inkl. sämtlicher Erweiterungen bereits letzten Dienstag 28. Dezember 2023 für alle Kunden freigeben – wenige Tage nach dem offiziellen Launch-day. Ein grosser Dank geht hier an Ondřej Surý, welcher unter DEB.SURY.ORG stets die aktuellsten PHP-Packages für Debian Linux zur Verfügung stellt.
Sämtliche Erweiterungen, welche bisher unter PHP 8.2 verfügbar waren, stehen euch auch bereit unter PHP 8.3.
Die neue Version ist in unserem Controlpanel unter «PHP-Manager» zu finden und lässt sich sowohl für die Hauptdomain als auch für sämtliche Subdomains individuell aktivieren.
Neuerungen in PHP 8.3
Diese PHP Version bringt zahlreiche neue Funktionen und Verbesserungen mit sich, die die Entwicklung von Webanwendungen mit PHP noch effizienter und leistungsfähiger machen. Deep-Cloning von schreibgeschützten Eigenschaften und eine neue Funktion zur Überprüfung von JSON-Strings. Die Randomizer-Klasse wurde ebenfalls erweitert, um die Generierung von Zufallszahlen und -strings zu erleichtern.
Dies sind die wichtigsten Neuerungen und Änderungen:
-
Typisierte Klassenkonstanten – In früheren Versionen von PHP waren Klassenkonstanten nicht typisiert, was zu Problemen führen konnte, wenn Schnittstellen oder implementierende Klassen unterschiedliche Typen für die gleiche Konstante verwendeten. Dies konnte zu unerwartetem Verhalten und potenziellen Fehlern führen.
Mit PHP 8.3 wurde die Einführung von typisierten Klassenkonstanten vorgenommen. Dies bedeutet, dass nun explizit der Typ einer Klassenkonstante angeben werden kann, um sicherzustellen, dass der gleiche Typ in der gesamten Vererbungshierarchie beibehalten wird.
-
Dynamisches Abrufen von Klassenkonstanten – In der Vergangenheit war es in PHP nicht möglich, Klassenkonstanten dynamisch abzurufen. Man musste den Namen der Konstanten als Zeichenkette kennen und diese dann mit der
constant()
-Funktion abrufen.Durch die Verwendung der geschweiften Klammern
{}
kann nun den Wert einer Klassenkonstante basierend auf einer dynamisch generierten Zeichenkette abgerufen werden. Dies erhöht die Lesbarkeit und verhindert potenzielle Rechtschreibfehler bei der Verwendung vonconstant()
. Beispiel:Foo::{$myConstant};
-
Neues
#[Override]
-Attribute – Bei der Überschreibung von Methoden in Klassen kann es zu Problemen kommen, insbesondere wenn es zu Tippfehlern oder Namensänderungen kommt. Dies kann dazu führen, dass unbeabsichtigte neue Methoden erstellt werden und die beabsichtigte Überschreibung nicht wie erwartet funktioniert.Um diese Problematik zu lösen, wurde in PHP 8.3 das neue
#[Override]
-Attribute eingeführt. Dieses Attribute kennzeichnet eine Methode in einer Klasse explizit als Absicht zur Überschreibung einer Methode in der übergeordneten Klasse oder in einem implementierten Interface. Dadurch wird vermieden, dass unbeabsichtigte neue Methoden erstellt werden und die Konsistenz des Codes verbessert sich. -
Deep-Cloning von schreibgeschützten Eigenschaften – In PHP gibt es die Möglichkeit, Eigenschaften als schreibgeschützt zu markieren, indem das
readonly
-Attribut verwendet wird. Diese schreibgeschützten Eigenschaften können nur im Konstruktor festgelegt werden und sind anschließend nicht mehr veränderbar. Sie bieten eine sichere Möglichkeit, Daten zu speichern und vor ungewollter Modifikation zu schützen.In früheren Versionen von PHP gab es jedoch Einschränkungen. Wenn ein Objekt mit schreibgeschützten Eigenschaften geklont wurde, wurde lediglich eine flache Kopie der Eigenschaften erstellt. Dies bedeutete, dass die schreibgeschützten Eigenschaften weiterhin auf das Originalobjekt verwiesen und somit nicht wirklich geklont wurden.
Mit PHP 8.3 gibt es nun eine neue Möglichkeit des Deep-Cloning von schreibgeschützten Eigenschaften. Beim Klonen eines Objekts mit schreibgeschützten Eigenschaften wird nicht nur eine flache Kopie der Eigenschaften erstellt, sondern es erfolgt ein vollständige Klonen der referenzierten Objekte. Dadurch werden die schreibgeschützten Eigenschaften vollständig geklont und können unabhängig vom Originalobjekt verwendet werden.
Die Möglichkeit des Deep-Cloning von schreibgeschützten Eigenschaften in PHP 8.3 erleichtert die Handhabung und Manipulation von Objekten mit solchen Eigenschaften erheblich. Es kann nun sichergestellt werden, dass schreibgeschützte Daten vollständig geklont und unabhängig vom Originalobjekt verwendet werden können.
-
Neue Funktion
json_validate()
– Die Überprüfung der Syntax und Gültigkeit von JSON-Strings war in früheren Versionen von PHP mit einigen Herausforderungen verbunden. Die Verwendung derjson_decode()
-Funktion allein bietet keine explizite Möglichkeit, festzustellen, ob ein JSON-String syntaktisch korrekt ist oder nicht. Dies kann zu Fehlern und unerwartetem Verhalten führen, insbesondere wenn die Integrität von JSON-Daten wichtig ist. In PHP 8.3 wurde die Funktionjson_validate()
eingeführt, um dieses Problem zu lösen. Diese Funktion ermöglicht es, die Syntax und Gültigkeit eines JSON-Strings zu überprüfen, ohne die Daten vollständig zu decodieren. -
Neue Methoden in der Randomizer-Klasse – Die Randomizer-Klasse in PHP bietet eine Vielzahl von Funktionen zur Generierung von Zufallszahlen und -strings. Diese Klasse wurde in PHP 8.3 um einige neue Methoden erweitert, die weitere Möglichkeiten zur Generierung von Zufallswerten bieten.
Die Randomizer-Klasse ist Teil der Random-Erweiterung in PHP und ermöglicht die Generierung von Zufallswerten basierend auf verschiedenen Algorithmen. Sie bietet eine Reihe von Methoden wie
getRandomBytes()
,getInt()
,getIntRange()
und andere. Mit diesen Methoden können Zufallszahlen, Binärdaten und zufällige Zeichenketten generiert werden.In PHP 8.3 wurden der Randomizer-Klasse zwei neue Methoden hinzugefügt:
getBytesFromString($allowedCharacters, $length)
ermöglicht die Generierung einer zufälligen Zeichenkette mit benutzerdefinierten erlaubten Zeichen und einer bestimmten Länge.getFloat($min, $max, $boundary)
ermöglicht die Generierung einer zufälligen Gleitkommazahl innerhalb eines bestimmten Bereichs.
-
Verbesserungen im Kommandozeilen-Linter – Der Kommandozeilen-Linter ist ein nützliches Tool in PHP, das entwickelt wurde, um den Code auf potenzielle Syntaxfehler und Probleme zu überprüfen, bevor er ausgeführt wird. Mit dem Kommandozeilen-Linter können Entwickler schnell und einfach Code-Fehler identifizieren und beheben, was dazu beiträgt, robustere und fehlerfreie Anwendungen zu erstellen.
In PHP 8.3 gab es Verbesserungen im Kommandozeilen-Linter, die die Verarbeitung mehrerer Dateien unterstützen. Das bedeutet, dass nun mehrere Dateien gleichzeitig mit dem Kommandozeilen-Linter überprüft werden können, um potenzielle Fehler im Code zu finden.
-
und einiges mehr...
Unter PHP 8.3 Released! findet ihr sämtliche neuen Features mit den entsprechenden Links zur Doku resp. RFCs aufgelistet.
Für weitere Infos beachte bitte auch das offizielle Release Announcement und unser Support-Wiki:
Weitere sehr empfehlenswerte Artikel:
- stitcher.io – What's new in PHP 8.3
- stitcher.io –
#[Override]
in PHP 8.3 - stitcher.io – Readonly classes in PHP 8.2
- stitcher.io – Cloning readonly properties in PHP 8.3
- PHP.Watch
Breaking Changes
PHP 8.3 ist eine neue Major-Version. Das bedeutet, dass einige Änderungen enthalten sind, die mit älterem Code nicht mehr kompatibel sind. Viele der Änderungen sind jedoch bereits seit PHP 8.2 als veraltet markiert, weshalb du mit dem Wechsel auf PHP 8.3 generell keine Probleme haben solltest, wenn du mit den Anpassungen in den vergangenen Versionen vertraut bist. Eine Liste mit allen Breaking Changes findest Du wie gehabt auf der Upgrade-Seite der PHP Group.
Bereit für PHP 8.3?
Aus unserer Sicht spricht absolut nichts gegen den Wechsel auf PHP 8.3. Bisher sind uns keine negativen Effekte aufgefallen und sämtliche grossen CMS und Web-Frameworks sollten problemlos laufen unter PHP 8.3. Einzig die Projekte, welche den Schritt auf PHP 8.2 bis heute verschlafen haben, werden wohl auch nicht ganz so rasch nachziehen und es ist zumindest mit E_DEPRECATED
Warnungen zu rechnen.
Du kannst ganz einfach testen, ob deine Website lauffähig ist unter dieser neuen Version. Im Controlpanel unter «PHP-Manager» kannst du die PHP-Version jederzeit up- resp. downgraden.