PHP 8.6 soll am 19. November 2026 erscheinen. Die beschriebene Version verbindet Änderungen an der Sprache mit neuen APIs, verbesserten I/O-Funktionen und strengeren Standardwerten. Mehrere ältere Schnittstellen und uneindeutige Verhaltensweisen werden gleichzeitig als veraltet markiert.

Die partielle Funktionsanwendung bindet ausgewählte Argumente und erzeugt eine Closure für die übrigen Parameter. Ein Fragezeichen kennzeichnet ein später gesetztes Argument. Drei Punkte lassen nachfolgende Parameter offen. Zusammen mit dem Pipe-Operator kann die Funktion zusätzliche Wrapper-Closures in Verarbeitungsketten überflüssig machen.

Argumente, die beim Erzeugen einer partiellen Funktion verwendet werden, wertet PHP sofort aus. Eine Arrow Function führt ihren Ausdruck bei jedem Aufruf aus. Das ist für veränderliche Zustände, Zeitwerte und Request-Daten relevant. Partielle Anwendung funktioniert nicht mit `new`, dem magischen Property-Zugriff über `__get()` oder `__set()` und Funktionen mit Abhängigkeit vom aufrufenden Scope wie `extract()` und `func_get_arg()`. Das Ergebnis ist eine anonyme Closure. Funktionsname und Attribute bleiben dabei nicht erhalten, wie es bei einem First-Class Callable wie `strlen(...)` der Fall ist.

Readonly-Eigenschaften dürfen künftig Standardwerte deklarieren. Das Attribut `#[\Override]` prüft nun auch Klassenkonstanten und meldet einen Fehler, wenn die übergeordnete Klasse oder das Interface kein passendes Element besitzt. Enums können `__debugInfo()` implementieren und damit ihre Darstellung in Funktionen wie `var_dump()` steuern.

Die neue Klasse `\Time\Duration` gibt Zeitspannen einen eigenen Typ. Fabrikmethoden wie `Duration::fromSeconds(5)` und `Duration::fromMilliseconds(500)` erzeugen Werte mit klarer Einheit. Eine Duration speichert Sekunden, Nanosekunden und ein Vorzeichen. 1500 Millisekunden entsprechen dabei einer Sekunde und 500 Millionen Nanosekunden.

Durations lassen sich addieren, multiplizieren und direkt vergleichen. Sie sind unveränderlich, deshalb liefern Operationen neue Instanzen zurück. Das eignet sich auch für Wiederholungsverzögerungen und exponentielles Backoff, ohne Einheiten laufend umzurechnen.

Mit `clamp()` kommt eine Funktion hinzu, die einen Wert auf eine untere und obere Grenze beschränkt. Sie arbeitet mit Zahlen und vergleichbaren Werten wie Datumsobjekten. Ein Datum nach dem 31. Dezember 2026 kann dadurch auf dieses Maximum begrenzt werden.

Fehler beim Parsen von JSON enthalten künftig Positionsangaben. Bisherige Möglichkeiten sind `json_last_error()`, `json_last_error_msg()` und `JSON_THROW_ON_ERROR`, das eine `JsonException` auslöst. PHP 8.6 kann bei einem Syntaxfehler eine Stelle wie `1:3` nennen. Diese Änderung betrifft die Fehlersuche beim Parsen. Sie ist vom RFC zur JSON-Schema-Validierung getrennt, der die Struktur und Inhalte von JSON für eine Anwendung prüft.

Das neue Standard-Enum `SortDirection` enthält `Ascending` und `Descending`. Bibliotheken können damit Sortieroptionen typisieren, die Werte auf SQL `ASC` und `DESC` abbilden und einen HTTP-Parameter vor dem Aufruf eines Repositorys umwandeln.

`trim()`, `ltrim()` und `rtrim()` entfernen in ihrer Standardzeichenliste künftig auch das Form-Feed-Steuerzeichen `\f`. Code, der von der bisherigen Zeichenliste abhängt, sollte beim Upgrade überprüft werden.

Die Rückgabe eines Werts aus `finally` wird veraltet. Sie kann den Rückgabewert aus `try` oder `catch` überschreiben. Ein leeres `return;` für einen vorzeitigen Ausstieg bleibt möglich. `spl_object_hash()` wird ebenfalls veraltet, empfohlen wird `spl_object_id()`. Die neue Funktion liefert eine Ganzzahl statt des bisherigen 32 Zeichen langen Strings. Rückgabewerte aus `__construct()` und `__destruct()` werden ebenfalls beanstandet.

Weitere Migrationsfälle sind `spl_classes()`, alte Typ-Aliase wie `is_double()`, `strcoll()` und `metaphone()`, die Umwandlung von Objekten in Arrays sowie bestimmte Bezeichner als Klassen- oder Funktionsnamen. `let`, `is` und `readonly` werden für mögliche spätere Sprachsyntax reserviert.

Die Standardwerte für Sessions werden sicherer. PHP 8.6 setzt `session.use_strict_mode = 1`, `session.cookie_httponly = 1` und `session.cookie_samesite = Lax`. Damit werden frei vorgegebene Session-IDs eingeschränkt, der Zugriff auf Session-Cookies durch JavaScript verhindert und viele Cross-Site-Anfragen begrenzt. Anwendungen mit Cross-Site-Authentifizierung oder JavaScript-Zugriff auf Cookies sollten ihre Konfiguration prüfen.

Die neue Polling-API vereinheitlicht das Warten auf I/O-Ereignisse über verschiedene Betriebssysteme hinweg. PHP kann dafür `epoll`, `kqueue`, Event Ports, `WSAPoll` oder `poll` verwenden. Das bisherige `stream_select()` basiert auf `select()` und hat bekannte Skalierungs- und Plattformgrenzen.

Für die neue API stehen `Io\Poll\Context`, `Io\Poll\Event` und `StreamPollHandle` zur Verfügung. Ein TCP-Server kann einen nicht blockierenden Socket für `Event::Read` registrieren, mit `Context::wait()` warten und bei einem Ereignis Clients annehmen. Die API liefert eine niedrige I/O-Schicht. Sie ist kein vollständiges asynchrones Programmiermodell und keine Event Loop. ReactPHP und Amp können darauf höhere Abstraktionen aufbauen.

`Context::wait()` akzeptiert eine `Time\Duration` als Timeout. Eine Duration von null prüft Ereignisse ohne Wartezeit. `null` wartet unbegrenzt. Zeitspannen können von Stunden bis zu Nanosekunden ausgedrückt werden. Als Beispiel wird ein Timeout von 1500 Millisekunden verwendet.

Für die Migration empfiehlt sich ein schrittweises Verfahren: scannen, einen Dry Run ausführen, prüfen, Änderungen anwenden, testen, messen und wiederholen. PHPCompatibility findet Kompatibilitätsprobleme und Deprecations auch in Code, den die Tests nicht ausführen. Rector kann Umschreibungen automatisieren. Sein Dry-Run-Diff und der abgedeckte PHP-Satz sollten geprüft werden. PHPStan mit Deprecation-Regeln erkennt veraltete APIs, wenn die Stubs sie kennen. Eine Baseline hält den bestehenden Rückstand fest. Tests zeigen Laufzeitwarnungen nur in tatsächlich ausgeführten Pfaden. CI kann steigende Deprecation-Zahlen ablehnen.

PHP 8.6 entwickelt die Sprache mit typisierten Wertobjekten, verständlicheren Diagnosen, strengeren Session-Standards und nativer Unterstützung für I/O-Polling weiter. Die Deprecations bilden den wichtigsten Teil der Upgrade-Planung.