PHP 8.1 erschien im November 2021 mit Enums, Fibers, readonly-Eigenschaften und dem strikten Fehlermodus für mysqli. Es bekam zwei Jahre aktive Pflege und danach, nach der verlängerten Regelung des PHP-Projekts, Sicherheitsupdates bis zum 31. Dezember 2025. Seit dem 1. Januar 2026 ist es ohne Updates.
Wo PHP 8.1 heute steht
Zehn Monate ohne Pflege, und schon mit einem konkreten Fall: Die beiden kritischen Lücken vom 21. Oktober 2026 (CVE-2026-109618 und CVE-2026-109619, Codeausführung ohne Anmeldung) wurden für 8.1 nicht geschlossen. Wer auf 8.1 läuft, hat sie offen, es sei denn, die Distribution liefert einen Backport. Was das für 8.1 und älter bedeutet, steht im Beitrag zum Oktober-Release.
8.1 ist weit verbreitet, weil es das Ziel vieler Migrationen der Jahre 2022 bis 2024 war: Laravel 9 und 10, Symfony 6.x, Shopware 6.5, TYPO3 12, Drupal 10. Die meisten dieser Frameworks laufen in aktuellen Versionen auf 8.4; der Blocker ist eher ein einzelnes Plugin oder eine Bibliothek.
Was beim Upgrade von 8.1 auf PHP 8.4 zu tun ist
Keine Brüche im Sinne von 8.0, aber Deprecations, die zu Fehlern werden, und wenige Verhaltensänderungen:
- Dynamische Eigenschaften sind seit 8.2 veraltet. Betroffen sind Modellklassen, Plugin-Objekte und alles, was Werte an
$thishängt, ohne sie zu deklarieren. Lösung: deklarieren oder#[\AllowDynamicProperties]dort, wo das Verhalten gewollt ist. ${var}-Interpolation in Zeichenketten ist seit 8.2 veraltet;{$var}bleibt. In Templates und Mail-Texten häufig.- utf8_encode() und utf8_decode() sind seit 8.2 veraltet; Ersatz ist
mb_convert_encoding(). - strtolower/strtoupper sind seit 8.2 Locale-unabhängig. Code, der auf
setlocale()für Umlaute setzte, verhält sich anders. - get_class() ohne Argument ist seit 8.3 veraltet; unserialize() meldet fehlerhafte Daten als Warnung statt Notice.
- Implizit nullbare Parameter (
Type $x = null) sind seit 8.4 veraltet. Rector schreibt sie in?Type $x = nullum. - E_STRICT ist seit 8.4 entfernt; round() rundet in Grenzfällen anders; xml_set_*-Funktionen ohne Objekt-Handler und mysqli_ping/mysqli_refresh sind veraltet.
- Bibliotheken: Die meisten großen Pakete unterstützen 8.4 seit Ende 2024. Nachzügler sind einzelne Plugins, interne Forks und alles, was seit 2023 kein Release hatte.
Was sich zwischen 8.0 und 8.3 geändert hat und was 8.4 bringt, steht in eigenen Beiträgen.
Der Weg von 8.1 auf PHP 8.4
composer installunter 8.4 auf einer Kopie. Was dort blockiert, ist die Arbeit; der Rest ist Rector.- Testsuite unter 8.4 laufen lassen, Deprecations einsammeln.
- Rector für Interpolation, nullbare Parameter, utf8-Funktionen. Dynamische Eigenschaften von Hand oder per Attribut.
- Umschalten mit Rückweg.
Für eine gepflegte Anwendung ein bis drei Tage. Deshalb reicht oft der kostenlose Kurz-Check, um den Aufwand einzuordnen; den Befund braucht, wer viele Plugins oder einen alten Framework-Stand hat.
Für wen das nicht passt
Wer auf 8.1 ein Framework ohne 8.4-Unterstützung betreibt (Laravel 9, Symfony 6.0 bis 6.3, Shopware 6.4), hat zuerst ein Framework-Upgrade vor sich. Das ist mehr Arbeit als das PHP-Upgrade und gehört in den Befund.