PHP 8 - Lohnt sich das Update?

27.11.2020
extendedLogo

Der 26.11.2020 war bei vielen Entwicklern im Kalender rot eingekreist, denn dann wurde die lang erwartete Version PHP 8.0 released. Welche neuen Features und Verbesserungen beinhaltet die neue Version und wie und wann sollten Sie auf PHP 8.0 wechseln?

Wir haben diese Informationen im Blogbeitrag zusammengefasst ‒ und werden diesen über die nächsten Wochen laufend aktualisieren.

Die neue Version PHP 8.0

Wie die Versionsnummer zeigt, handelt es sich diesmal um einen Major-Release, was einige Änderungen impliziert, die ggf. nicht abwärtskompatibel sind. Dies sollte jedoch weniger Probleme verursachen, wenn man seine PHP-Version immer auf dem neuesten Stand gehalten hat. Viele Websites, die mit PHP geschrieben wurden, verwenden jedoch noch eine alte Version, die (vermutlich) bald nicht mehr unterstützt wird. Den Code Ihrer Website auf dem neuesten Stand zu halten und stets neue Versionen von PHP zu verwenden, hat seine Vorteile: Neue Funktionen bieten nicht nur eine größere Vielfalt, sondern ermöglichen Verbesserungen in der Leistung und Sicherheitsprobleme werden behoben.

Bitte beachten Sie, dass Sie aufgrund der Verbesserungen bei PHP 8.0 ggf. Anpassungen am Code vornehmen müssen. Eine Liste über alle Änderungen finden Sie hier: https://www.php.net/manual/de/appendices.php und die offizielle Dokumentation hier: https://www.php.net/manual/en/migration80.php.

Falls Sie noch eine Auffrischung Ihrer PHP-Programmierkenntnisse brauchen, könnte Ihnen folgende PHP-Tutorial https://www.php.net/manual/en/tutorial.php oder die Kursplattform https://jobtensor.com/Tutorial/PHP/en/Introduction weiterhelfen.

Neue Features und Verbesserungen

Alle Berichte im Vorfeld des PHP 8.0 Releases waren sich einig: Die neue Version wird schneller und sicherer. Im Folgenden einige ausgewählte Funktionen und Verbesserungen, die hierzu beitragen (eine komplette Übersicht über die implementierten Features finden Sie hier).

JIT-Compiler (“Just in time”-Compiler)

Was ist ein JIT-Compiler bzw. was macht er? Da PHP eine interpretierte Sprache ist, wird der Code nicht kompiliert, sondern während der Laufzeit Zeile für Zeile interpretiert. Bisher wurde dies bereits durch den PHP Opcache beschleunigt, der den menschenlesbaren PHP Code in einen maschinenlesbaren Bytecode übersetzt und cacht. Der JIT-Compiler geht hier noch einen Schritt weiter, denn er verfügt über eine Funktion, die den Code stellenweise ‒ während der Laufzeit, immer “just in time” ‒ in nativen Assembler Code übersetzt. Anstelle des eigentlichen PHP Bytecodes wird dann dieser direkt ausgeführt. Ob dabei nur häufig verwendete oder alle Funktionen mit dem JIT-Compiler in Maschinencode übersetzt werden, ist abhängig von der Einstellung opcache.jit.

Doch macht diese Funktion die Anwendungen wirklich schneller? Phoronix hat bereits im Juni erste Tests durchgeführt und ermittelte eine Leistungssteigerung von 7 % bei einem Wechsel von PHP 7.4 auf PHP 8.0 (Git, Alpha 1) und eine mehr als 50%-ige Steigerung bei der Nutzung von PHP 8.0 mit JIT-Compiler gegenüber PHP 8.0 ohne JIT-Compiler:

PHP-BenchmarkPerformance-Verbesserung von PHP 8.0 (mit und ohne JIT-Compiler)

PHP-BenchmarkPerformance-Verbesserung von PHP 8.0 (mit und ohne JIT-Compiler)

Auf gitconnected gibt es von Pedro Escudero einen weiteren Performance-Test: https://levelup.gitconnected.com/how-fast-is-php-8-going-to-be-f7fdc111cd6. Und auch der PHP-Entwickler Brent hat einige Tests vor dem Release der aktuellen Software durchgeführt: https://stitcher.io/blog/jit-in-real-life-web-applications. Brent kommt zu dem Schluss, dass für Web-Requests keine Performance-Steigerung über 10 % erwartet werden kann.

Inwiefern der neue JIT-Compiler tatsächlich sein Versprechen bezüglich mehr Performance halten kann, wird sich daher erst in den nächsten Wochen zeigen, wenn mehr Tests mit der Live-Version gemacht wurden. Teilen Sie uns gerne Ihre Erfahrungen mit ‒ schreiben Sie einfach eine E-Mail an marketing@maxcluster.de. Wir werden diese dann in unseren Blogartikel-Aktualisierungen aufnehmen.

Named Arguments

“Named Arguments” auch “named parameters” genannt, erlauben es nun, Parameter anhand des Parameternamens an eine Funktion zu übergeben. Dies war früher nur über eine Reihenfolge möglich. Nun können Werte an eine Funktion durch die Angabe von Values übergeben werden. Hierbei muss die Reihenfolge nicht berücksichtigt und optionale Parameter können übersprungen werden. Auch “Array-Spreading” wird unterstützt.

Static-Return-Types

“Static” ist ein spezieller Klassenname in PHP, der die Klasse referenziert, mit der eine Methode aufgerufen wird ‒ auch wenn diese Methode vererbt ist. Mit PHP 8.0 wird “static” neben “self” und “parent” jetzt zum validen Return Type.

Union Types

Mit Hilfe von Union Types ist es möglich, Variablen bzw. Rückgabewerte und Parameter zu definieren, die mehrere möglichen Typen annehmen können. Hierdurch kann eine Typenbindung erzwungen werden, selbst wenn der Variablentyp dynamisch ist.

Attribute

Attribute, auch als Annotationen oder Decoratoren bekannt, bieten nun eine Möglichkeit, Metadaten zu Klassen hinzuzufügen, ohne Dokumentblöcke verwenden zu müssen. Dies erlaubt es, die Metadaten besser von Dokumentblöcken zu trennen, womit das Parsing zur Auswertung entfällt. Auch ist es möglich, über die Reflection API direkt auf die neuen Attribute zugreifen zu können.

Weak Maps

“Weak Refs” wurden in PHP 7.4 eingeführt und ermöglichten Referenzen zu Objekten, die den Garbage Collector nicht hinderten, diese Objekte zu zerstören. “Weak Maps” in PHP 8.0 sind nun eine Art Upgrade dieser Funktionalität. Über “weak refs” und “weak maps” kann jetzt festgelegt werden, dass Objekte gelöscht werden können, wenn sie nur noch von der MAP referenziert werden.
Besonders im Fall von ORMs, die mehrere hundert, wenn nicht Tausende von Entitäten innerhalb einer Anfrage verwalten können, können “Weak Maps” eine gute, ressourcenschonendere Art und Weise bieten, mit diesen Objekten umzugehen.

Weitere Neuerungen

PHP 8.0 hat eine Vielzahl weiterer Neuerungen zu bieten, von der im Folgenden eine kleine Auswahl aufgelistet wird:

  • DateTime- und DateTimeImmutable-Objekte lassen sich nun jeweils ineinander konvertieren.
  • Mit der neuen “fdiv”-Funktion ist seit php 8.0 das Teilen durch 0 möglich. Als “return value” erhält man dabei “INF”, “-INF” oder “NAN”.
  • Der neue “Nullsafe operator (>?)” ist nützlich, wenn es darum geht, Properties und Methoden auszulesen, denn beim ersten Auftreten einer Null Value umgeht er den Rest der Code-Zeile.
  • Der neue “Constructor property promotion” erlaubt die Reduzierung von Boilerplate Code, da man nun in der Parameter-Liste Konstruktionsdefinitionen und Variablenzuweisungen in einer Syntax kombinieren kann.
  • Die “stringable interface” implementiert eine Schnittstelle nun automatisch. Dieser Schritt musste früher manuell gemacht werden.
  • Der “Uniform Variable Syntax" in PHP 8.0 bringt weitere Anpassungen und bügelt einige Inkonsistenten in PHPs Variablensyntax aus.
  • Es ist nun möglich, Funktionsparameter, mit einem abschließenden Komma zu übergeben.

Die vollständige Liste aller Änderungen finden Sie hier: https://wiki.php.net/rfc#php_80

Was muss man vor dem Update beachten?

Die Neuerungen von PHP 8.0. sind für Sie so interessant, dass Sie umgehend updaten möchten? Ein paar Schritte gilt es vorab zu beachten ‒ unabhängig von Ihrem Shop- bzw. CMS-System:

  1. Prüfen Sie, ob Ihr Shop- bzw. CMS-System mit dieser Major-Version kompatibel ist.
  2. Gehen Sie auf Nummer sicher und erstellen Sie ein Backup.
  3. Und noch mehr Sicherheit: Richten Sie eine Entwicklungsumgebung ein, installieren Sie das PHP-Update und führen Sie Tests durch. Vergessen Sie dabei nicht, auch Ihre eingesetzten Plugins auf Kompatibilität zu testen.
  4. Ihre Tests waren erfolgreich? Dann können Sie das Update jetzt auch in Ihrer Live-Umgebung installieren.

Erhöhen Sie die Sicherheit und Stabilität Ihrer Anwendung, indem Sie ‒ soweit möglich ‒ immer die aktuellste PHP-Version nutzen. Sollte dies nicht möglich sein, versuchen Sie möglichst sicherzustellen, dass Sie zumindest eine Version nutzen, die offizielle Security-Updates erhält. Unter dem Motto "Keeping Current" unterstützt PHP diesen Ansatz, indem Sicherheitslücken kontinuierlich geschlossen werden. Ihre Vorteile: das Leistungspotenzial Ihrer Anwendung erhöht sich, Sie werden weniger Probleme beim Update und der Nutzung von Plugins und Erweiterungen haben und neue Features können umgehend genutzt werden. Eine Übersicht der Features der letzten Version 7.4 finden Sie übrigens in unserem Blogartikel “PHP 7.4 - Lohnt sich das Update”.

Kompatibilität von PHP 8.0 mit gängigen Anwendungen

Die Features und Verbesserungen von PHP 8.0 haben Sie überzeugt und Sie wollen Ihre Anwendung sofort umstellen? Wir werden alle Informationen zur Kompatibilität mit allen gängigen Anwendungen sukzessive in diesem Blogartikel nachreichen und die untenstehende Tabelle befüllen, sodass Sie anhand dieser überprüfen können, ob die neue Version kompatibel ist (Stand: 18.11.2021):

Shopsystem Kompatibilität Anmerkung
Magento 1 Eine Unterstützung ist unwahrscheinlich, da Magento 1 bereits End-of-Life ist
Magento 2 Unterstützung für PHP 8.1 voraussichtlich ab Version 2.4.4
Shopware 5 Unterstützung ab Version 5.7
Shopware 6 Unterstützung ab Version 6.4.0.0
TYPO3 Unterstützung ab Version v11
WordPress Unterstützung ab Version 5.6
Drupal Unterstützung ab Version 9.1.0
Oxid Unterstützung ab Version 6.3
--- --- ---
Matomo (Piwik) Unterstützung ab Version 4.0
WooCommerce Unterstützung ab Version 5.0
xt:Commerce Bisher keine Unterstützung von PHP 8.0

Welche Anwendungen und Shopsysteme sind kompatibel?

Die fehlenden Informationen werden wir Ihnen nachreichen, sobald diese verfügbar sind.

Magento 2 und PHP 8.0

Laut Systemanforderungen wird Magento 2 erst ab der kommenden Version 2.4.4 eine Unterstützung für PHP 8.1 bieten, welches selbst erst im November 2021 veröffentlicht wird. Der Release-Termin ist der 08. März 2022.

Magento 1 und PHP 8.0

Aufgrund des End-of-Life von Magento 1 ist nicht davon auszugehen, dass es eine offizielle Unterstützung für PHP 8.0 geben wird. Im Rahmen des Magento-Forks "OpenMage Magento LTS" wird bereits an einer Unterstützung für PHP 8.0 gearbeitet.

Shopware 6 und PHP 8.0

Die am 04. Mai 2021 veröffentlichte Version 6.4.0.0 bietet Unterstützung für PHP 8.0. Die Kompatibilität von Themes und Plugins muss im Einzelnen geprüft werden.

Shopware 5 und PHP 8.0

PHP 8.0 wird ab Version Shopware 5.7 unterstützt.

Wordpress und PHP 8.0

Wordpress hat die Unterstützung für PHP 8.0 mit Version 5.6 erhalten. Diese wurde am 08. Dezember 2020 veröffentlich. Die Kompatibilität von Themes und Plugins muss im Einzelnen geprüft werden.

TYPO3 und PHP 8.0

TYPO3 ist aber Version v11 mit PHP 8.0 und PHP 8.1 kompatibel.

EOL und Roadmap aktueller PHP-Versionen

Natürlich müssen Sie noch keinen Wechsel auf PHP 8.0 vornehmen, dennoch sollten Sie einen Blick auf die Roadmap der aktuellen Versionen werfen, um Ihre nächsten Schritte zu planen. Der offizielle Support für PHP 7.2 beispielsweise ist am 30.11.2020 beendet worden. Einige Versionen erhalten noch inoffizielle Security-Backports, die auch auf unseren Clustern zur Verfügung stehen. Wir empfehlen jedoch, möglichst eine aktuelle Version einzusetzen.

Version Security-Support
<= PHP 5.5 Keine Security-Updates mehr
PHP 5.6 Inoffizielle Security Backports
PHP 7.0 Inoffizielle Security Backports
PHP 7.1 Inoffizielle Security Backports
PHP 7.2 Inoffizielle Security Backports
PHP 7.3 Offizieller Security-Support bis 06.12.2021
PHP 7.4 Offizieller Security-Support bis 28.11.2022
PHP 8.0 Offizieller Security-Support bis 26.11.2023

Bitte beachten Sie auch, dass Microsoft angekündigt hat, dass es keine Windows-Unterstützung für PHP 8 und spätere Versionen mehr anbieten wird. Die PHP-Entwickler haben jedoch bereits mitgeteilt, dass sie dies bearbeiten, sodass Microsoft-Fans nichts zu befürchten haben.

Wechsel auf PHP 8.0: So gelingt das Update

PHP 8.0 individuell einrichten

Wenn Sie kein Managed Hosting verwenden, können Sie PHP 8.0 auch individuell einrichten. Hierzu laden Sie vorab die aktuelle Version herunter. Abhängig von Ihrem verwendeten Betriebssystem ist dann die weitere Vorgehensweise:

PHP 8.0 bei maxcluster einrichten

Bei maxcluster steht PHP 8.0 auf allen Ubuntu-Clustern zur Verfügung. Wenn Sie es für Ihre Anwendung verwenden möchten, genügt es, wenn Sie die Version für den vHost aktivieren. Sollte die eingesetzte Anwendung Probleme mit dieser neuen Version haben, lässt sich der Vorgang umgehend wieder rückgängig machen.

PHP 8.0 im ManagedCenterAktivierung von PHP 8.0 im Managed Center

Sie nutzen noch einen unserer älteren Debian-Cluster und möchten gerne PHP 8.0 verwenden? Dann wenden Sie sich bitte an unseren Support und wir prüfen, ob ein Wechsel auf einen Ubuntu-Cluster 18.04 bzw. 20.04 möglich ist. 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

Mit dem neuen Major-Release 8.0 von PHP wurden viele neue Features und Optimierungen released, die Leistungsverbesserungen mit sich bringen - allen voran der lang erwartete JIT-Compiler. Und auch bei dieser Version haben die Entwickler den Fokus auf Code-Konstrukte gelegt, die dabei unterstützen, kürzeren, besser strukturierten und lesbareren Code zu schreiben. Verbesserte Performance und kürzere Lade- und Zugriffszeiten sind die positive Folge für Onlineshops und rechtfertigen den Aufwand eines Updates auf diese Version.


Zuletzt aktualisiert am 18.11.2021 | NM