
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.
Early-Benchmarks von Phoronix (PHP Benchmark Suite) | Quelle: Phoronix
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:
Shopsystem / CMS | Kompatibilität | Anmerkung |
---|---|---|
Magento 1 | ✗ | Mit einer offiziellen Unterstützung ist nicht zu rechnen, da Magento 1 bereits End-of-Life ist |
Magento 2 | ✓ | PHP 8.2 wird ab Version 2.4.6 unterstützt |
Shopware 5 | ✓ | Eine Unterstützung von PHP 8.2 steht ab Version 5.7.17 zur Verfügung |
Shopware 6 | ✓ | PHP 8.2 wird ab Version 6.5 unterstützt |
TYPO3 | ✓ | Unterstützung von PHP 8.2 für Typo3 v12 und v11 LTS |
WordPress / WooCommerce | ✓ | Unterstützung von PHP 8.2 ab WordPress 6.1 |
Drupal | ✓ | Unterstützung von PHP 8.2 ab Drupal 10.0.0 |
OroCommerce | ✓ | Unterstützung von PHP 8.2 ab Version 5.1 LTS von OroCommerce |
Weitere Anwendungen | Kompatibilität | Anmerkung |
---|---|---|
Matomo (Piwik) | ✓ | Matomo ist mittlerweile mit PHP 8.2 kompatibel |
Tideways | ✓ | Tideways ist bereits mit PHP 8.2 kompatibel |
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.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.
Installation von PHP 8.2 im Application Center von maxcluster |Screenshot: maxcluster
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 supportmaxcluster.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.