PHP 8.2 – Lohnt sich das Update?
Am 08. Dezember 2022 ist mit PHP 8.2 die neue Minor-Version der Skriptsprache PHP erschienen. Welche Neuerungen und Veränderungen in PHP 8.2 enthalten sind, zeigen wir in diesem Blogbeitrag.
PHP 8.2, das neue PHP Minor-Release, beinhaltet bereits viele Änderungen und Features, die auf die nächste Major-Version vorbereiten. Auf den ersten Blick scheint PHP 8.2 keinen riesigen Schwung an Neuerungen mit sich zu bringen. Dennoch sind auch in diesem Release einige interessante Updates enthalten. In diesem Beitrag erfahren Sie, ob und unter welchen Voraussetzungen es sich für Shopbetreiber lohnt, PHP 8.2 zu installieren.
Neue Features und Verbesserungen
In gewohnter PHP-Manier liefert PHP 8.2 eine Menge neuer Funktionen und Verbesserungen. Neben einer besseren Performance wurden neue Features für Klassen, Typen und vieles mehr ausgerollt.
Performance
Die Performance von PHP 8.2 hat sich im Vergleich zum vorangegangenen Minor-Release PHP 8.1 wieder leicht verbessert. Das wird bereits anhand der Early-Benchmarks von Phoronix, die im Mai 2022 durchgeführt wurden, ersichtlich.
Readonly Classes
Seit PHP 8.1 können Klasseneigenschaften als schreibgeschützt gekennzeichnet werden, indem sie mit dem Keyword readonly
versehen werden. In PHP 8.2 ist es nun möglich, ganze Klassen als readonly
zu kennzeichnen. Das hat den Vorteil, dass alle in der Klasse enthaltenen Eigenschaften diese Kennzeichnung erben. Da Klasseneigenschaften nun nicht mehr einzeln mit readonly
versehen werden müssen, spart das neue Feature viel Zeit.
readonly class Test {
public string $prop;
}
Beispiel: Definition einer Klasse mit dem Keyword readonly
| Quelle: php.net
Auch Klassen ohne Eigenschaften können als readonly
gekennzeichnet werden. Auf diese Weise wird verhindert, dass der Klasse dynamische Eigenschaften hinzugefügt werden, während die Eigenschaften untergeordneter Klassen individuell als readonly
deklariert werden können.
null
und false
als Standalone Types
Mit dem Major Update PHP 8.0 wurden die sogenannten Union Types eingeführt. Mithilfe dieser können Parameter und Variablen definiert werden, die mehrere mögliche Typen annehmen können. Auch false
und null
können in PHP 8.0 als Bestandteile von Union Types definiert werden, allerdings nicht als Standalone Types. Letzteres löst eine Fehlermeldung aus.
PHP 8.2 macht es nun möglich, false
und null
auch als Standalone Types zu definieren. Return-, Parameter- und Property-Types können auf diese Weise genau definiert werden.
class Nil {
public null $nil = null;
public function foo(null $v): null { /* ... */ *}
}
class Falsy {
public false $nil = false;
public function foo(false $v): false { /* ... */ *}
}
null
und false
als Standalone Types | Quelle: php.net
True Types
Mit der Einführung von PHP 8.2 wird auch der true
Type etabliert. Dieser kann überall dort verwendet werden, wo PHP die Verwendung von Typen zulässt. So kann true
genau wie false
und null
als Standalone Type oder als Teil von Union Types verwendet werden.
class Truthy {
public true $truthy = true;
public function foo(true $v): true { /* ... */ *}
}
Beispiel – true
Type als Standalone Type | Quelle: php.net
Genau wie sein Gegenstück false
erlaubt der true
Type keinen Zwang. true
und false
können allerdings nicht gemeinsam mit dem PHP-Type bool
in einem Union Type definiert werden. In diesem Fall würden Fehler bei der Kompilierung auftreten.
Konstanten in Traits
Aufs Wesentliche heruntergebrochen sind Traits Code, der innerhalb verschiedener Klassen wiederverwendet werden kann. Bisher konnten innerhalb der Traits nur Methoden und Eigenschaften definiert werden. Ab PHP 8.2 ist dies nun auch mit Konstanten möglich. Eine Definition von Trait-Konstanten gleicht der Definition von Konstanten innerhalb einer Klasse.
trait Foo {
public const FLAG_1 = 1;
protected const FLAG_2 = 2;
private const FLAG_3 = 2;
public function doFoo(int $flags): void {
if ($flags & self::FLAG_1) {
echo 'Got flag 1';
}
if ($flags & self::FLAG_2) {
echo 'Got flag 2';
}
if ($flags & self::FLAG_3) {
echo 'Got flag 3';
}
}
}
Beispiel einer Trait-Konstante | Quelle: php.net
Trait-Konstanten können über die jeweilige Klasse, in der der Trait mit der Konstante verwendet wird, aufgerufen werden. Ein Zugriff auf die Konstante über die definierten Eigenschaften ist jedoch nicht möglich.
Neue Zufall-Erweiterung
Mit der Random-Extension wird in PHP 8.2 ein neuer Zufallsgenerator implementiert, der deutlich leistungsfähiger und zuverlässiger als sein Vorgänger funktioniert. Die neue PHP-Klasse Randomizer kann eine solche Zufallsgenerator-Engine beinhalten. Bestehende PHP-Funktionen zur Erzeugung von Zufallszahlen werden in der neuen Extension organisiert und um neue PHP-Klassenstrukturen erweitert.
Disjunctive Normal Form Types
Die neu eingeführten DNF Types basieren auf der DNF-Methode, die zur Organisation von Booleschen Ausdrücken verwendet wird. DNF Types erlauben es, Intersection Types und Union Types miteinander zu kombinieren, damit sie vom Parser verarbeitet werden können. Bei einer solchen Kombination gilt standardmäßig, dass die Intersection Types mithilfe von Klammern gruppiert werden müssen.
interface A {}
interface B {}
interface C extends A {}
interface D {}
class W implements A {}
class X implements B {}
class Y implements A, B {}
class Z extends Y implements C {}
Beispiel eines DNF Types mit bereits existierenden Schnittstellen- und Klassendefinitionen | Quelle: php.net
Neue MySQLi-Erweiterung
Vor dem Release von PHP 8.2 war die Ausführung von parametrisierten SQL-Abfragen nur mithilfe einer Menge Boilerplate-Code möglich. Die neue MySQLi-Extension, die neben der neuen Funktion mysqli_execute_query
auch die neue Methode mysqli::execute_query
enthält, vereinfacht das Abrufen von Ergebnissen aus einer SQL-Abfrage erheblich.
Die Funktion mysqli_execute_query
setzt sich aus den Funktionen mysqli_prepare()
, mysqli_execute()
und mysqli_stmt_get_result()
zusammen. Auf diese Weise wird die MySQL-Abfrage vorbereitet, gebunden und innerhalb der Funktion ausgeführt. Verläuft die Abfrage erfolgreich, wird zudem ein mysqli_result-Objekt ausgegeben. Ist die Abfrage hingegen nicht erfolgreich, wird false
ausgegeben.
Weitere Neuerungen
PHP 8.2 enthält neben den bereits genannten noch zahlreiche weitere Features. Dies sind einige davon:
- Sensible Parameter in Backtraces: Stacktracing hilft beim Debuggen von Code und ist in PHP schon länger möglich. Sensible Parameter können in PHP 8.2 mit dem Attribut
SensitiveParameter
versehen werden. Dadurch werden sie aus dem Stacktrace entfernt. - Neue OpenSSL-Funktion: Die OpenSSL-Extension verfügt über die neue Funktion
openssl_cipher_key_length
. Diese gibt die erforderliche Länge des Keys für jede unterstützte OpenSSL-Chiffre zurück. - Upkeep-Funktion in Curl-Extension: Die neue Funktion
curl_upkeep
unterstützt dabei, eine Curl-Verbindung aufrechtzuerhalten. Diese Funktion wird aktuell nur von HTTP/2 unterstützt.
Verwerfungen
In PHP 8.2 werden bereits erste Vorbereitungen im Hinblick auf das nächste Major-Release PHP 9.0 getroffen. So gelten einige PHP-Funktionen und -Modalitäten mit Erscheinen von PHP 8.2 als veraltet und werden nicht weiter unterstützt.
Dynamische Klasseneigenschaften
Innerhalb von PHP-Klassen war es bislang möglich, nicht deklarierte Klasseneigenschaften dynamisch zu setzen. Diese Funktion bietet zwar die Flexibilität, Klassen ohne eine strikte Klassendefinition zu erstellen, allerdings besteht auch das Risiko auftretender Fehler innerhalb der Anwendung. In PHP 8.2 wird das Setzen eines Wertes für eine nicht deklarierte Klasseneigenschaft daher verworfen.
MySQLi-Kompilierung mit libmysqli
Bisher konnten MySQL-Datenbanken mit einer der beiden Libraries mysqlnd oder libmysqli kompiliert werden. Seit PHP 5.4 ist mysqlnd bereits standardmäßig als Library gesetzt. In PHP 8.2 und zukünftigen PHP-Versionen wird die MySQLi-Kompilierung mit libmysqli nicht länger unterstützt.
utf8_encode
and utf8_decode
Die Funktionen utf8_encode
und utf8_decode
gelten in PHP 8.2 als veraltet. Bislang waren sie Teil der Standard-Library von PHP und dienten zur Konvertierung von Strings, die in ISO-8859-1 oder UTF-8 kodiert sind.
Sie können jedoch nicht verwendet werden, um andere gängige Strings zu konvertieren. Daher treten bei der Eingabe nicht unterstützter Strings häufig Fehler auf. Anstelle der genannten Funktionen wird die Verwendung der PHP-Extensions mbstring, intl oder iconv empfohlen.
Was ist vor dem Update zu beachten?
Sie denken über ein Update auf die neue PHP-Version 8.2 nach? Folgende Dinge sollten Sie prüfen, bevor Sie mit dem Update beginnen:
- Prüfen Sie, ob Ihr Shop- oder CMS-System bereits mit PHP 8.2 kompatibel ist.
- Erstellen Sie vor dem Update unbedingt ein Backup, um im Problemfall den ursprünglichen Zustand wiederherstellen zu können.
- Testen Sie das neue PHP-Update in einer Entwicklungsumgebung, um mögliche Problemszenarien schon im Vorfeld zu identifizieren. Diese Praxistests geben Ihnen mehr Sicherheit für das Update in Ihrer Produktivumgebung. Übrigens sollten auch Ihre eingesetzten Plugins auf Kompatibilität mit PHP 8.2 getestet werden.
- Anhand des PHP-Migrationsleitfadens können Sie feststellen, ob im Zuge des Updates Änderungen an Ihrem eigenen Code notwendig sind.
- Falls Ihre Tests erfolgreich waren, steht der Installation des Updates auch in Ihrer Produktivumgebung nichts mehr im Weg.
Erhöhen Sie die Sicherheit und Stabilität Ihrer Anwendung, indem Sie − sofern möglich − immer die aktuellste PHP-Version nutzen. Andernfalls verwenden Sie möglichst eine Version, die offizielle Security-Updates erhält. Je aktueller Ihre PHP-Version ist, desto höher ist in der Regel auch das Leistungspotenzial Ihrer Anwendung. Außerdem werden Sie weniger Probleme hinsichtlich der Nutzung von Features und Erweiterungen bei der Verwendung von Plugins haben.
Kompatibilität von PHP 8.2 mit gängigen Anwendungen
Die neuen Features und Verbesserungen von PHP 8.2 haben Sie überzeugt und Sie wollen Ihre Anwendung umgehend auf die neue Version umstellen? Da PHP 8.2 noch ziemlich neu ist, gibt es zum Teil noch keine Informationen in Bezug auf die Kompatibilität aller gängigen Anwendungen. Wir reichen Ihnen diese Informationen in diesem Blogartikel sukzessive nach, indem wir die nachfolgende Tabelle regelmäßig aktualisieren. Anhand der Tabelle können Sie überprüfen, ob die neue Version mit Ihrer Anwendung kompatibel ist:
Welche Anwendungen und Shopsysteme sind kompatibel?
Hier finden Sie weitere Details zur (geplanten) Kompatibilität von PHP 8.2 mit gängigen Shop- und CMS-Systemen. Dieser Artikel wird fortlaufend aktualisiert, sodass fehlende Informationen nachgetragen werden, sobald diese bekannt sind.
Magento 2 und PHP 8.2
Magento 2 unterstützt PHP 8.2 ab der Version 2.4.6, die im März 2023 veröffentlicht wurde.
Magento 1 und PHP 8.2
Aufgrund des End-of-Life von Magento 1 ist davon auszugehen, dass es keine offizielle Unterstützung für PHP 8.2 geben wird. Im Rahmen des Magento-Forks "OpenMage Magento LTS" wird aktuell an einer Unterstützung für PHP 8.1 gearbeitet. Auch durch das Projekt “Mage One” sind möglicherweise demnächst entsprechende Patches verfügbar. Mehr dazu in unserer FAQ.
Shopware 6 und PHP 8.2
Seit dem Major-Release von Shopware 6.5, das im Mai 2023 erschienen ist, besteht Unterstützung für PHP 8.2.
Shopware 5 und PHP 8.2
Shopware 5 ist seit Version 5.7.17 mit PHP 8.2 kompatibel.
WordPress / WooCommerce und PHP 8.2
Für PHP 8.2 besteht bereits Support ab WordPress 6.1.
TYPO3 und PHP 8.2
Typo3 ist in den Versionen v12 und v11 LTS bereits mit PHP 8.2 kompatibel.
EOL und Roadmap aktueller PHP-Versionen
Ein sofortiger Wechsel auf PHP 8.2 ist natürlich nicht zwingend notwendig, dennoch sollten Sie die Roadmap der aktuellen PHP-Versionen im Auge behalten. So können Sie Ihre nächsten Schritte sorgfältig planen, ohne vom plötzlichen EOL einer PHP-Version überrascht zu werden. Einige Versionen erhalten noch inoffizielle Security-Backports, die auch auf unseren Clustern zur Verfügung stehen. Wir empfehlen jedoch den Einsatz einer möglichst aktuellen Version. Der offizielle Support für PHP 7.4 ist zum Beispiel vor kurzem ausgelaufen.
Version | Security-Support |
---|---|
PHP 7.0 | Inoffizielle Security Backports |
PHP 7.1 | Inoffizielle Security Backports |
PHP 7.2 | Inoffizielle Security Backports |
PHP 7.3 | Inoffizielle Security Backports |
PHP 7.4 | Inoffizielle Security Backports |
PHP 8.0 | Offizieller Security-Support bis 26.11.2023 |
PHP 8.1 | Offizieller Security-Support bis 25.11.2024 |
PHP 8.2 | Offizieller Security-Support bis 24.11.2025 |
Wechsel auf PHP 8.2: So gelingt das Update
Individuelle Einrichtung von PHP 8.2
Sollten Sie kein Managed Hosting verwenden, ist es möglich, PHP 8.2 auch individuell einzurichten. Dazu laden Sie zunächst die aktuelle Version herunter. Abhängig von Ihrem verwendeten Betriebssystem können Sie danach wie folgt vorgehen:
- Ubuntu: Für Ubuntu empfehlen wir die Pakete vom Maintainer Ondřej Surý, die wir auch im Application Center von maxcluster verwenden.
- RPM: Für Linux-Distributionen auf Basis von RPM können Sie die Pakete von Remi verwenden.
- Windows: Für Entwicklungsumgebungen unter Windows können Sie zum Beispiel die Pakete von Ondřej Surý unter WSL nutzen. Alternativ ist es möglich, eine einfache Entwicklungsumgebung mit XAMPP zu erstellen.
PHP 8.2 bei maxcluster einrichten
Bei maxcluster steht PHP 8.2 ab dem 01.02.2023 auf allen Ubuntu-Clustern zur Installation bereit. Wenn Sie die neue Version für Ihre Anwendung verwenden möchten, genügt es, wenn Sie die Version für den vHost in unserem Application Center aktivieren. Sollte die verwendete Anwendung in Kombination mit PHP 8.2 zu Problemen führen, kann der Vorgang umgehend rückgängig gemacht werden.
Sie nutzen noch einen unserer älteren Debian-Cluster und möchten gerne PHP 8.2 verwenden? Wenn Sie prüfen möchten, ob ein Wechsel auf einen Ubuntu-Cluster 18.04, 20.04 oder 22.04 möglich ist, wenden Sie sich jederzeit gerne an unseren Support. Unser Team unterstützt Sie gerne auch bei anderen Fragen und Problemen via E-Mail an support@maxcluster.de oder telefonisch unter 05251/41 41 30.
Fazit
PHP 8.2 enthält genau wie seine Vorgänger-Versionen viele nützliche Features und Verbesserungen. Auch die nächste Major-Version wirft bereits erste Schatten voraus. So sind einige etablierte PHP-Funktionen im Zuge des neuen Releases als veraltet deklariert worden. Planen Sie einen Wechsel auf die neue Version, prüfen Sie zuvor, ob Sie eine oder mehrere der veralteten PHP-Funktionen innerhalb Ihrer Anwendung verwenden.
Aktuell wird PHP 8.2 noch nicht von allen gängigen Shop- und CMS-Anwendungen unterstützt. Ein Wechsel ist erst ratsam, wenn der jeweilige Provider den offiziellen Support der neuen PHP-Version bekannt gibt.
Zuletzt aktualisiert am 29.03.2023 | DR