Das PHP-Team hat am 5. November 2026 den fünften Release Candidate von PHP 8.6.0 veröffentlicht, RC5. Es ist die letzte Testetappe vor dem Stable-Release, der für den 19. November angekündigt ist. Neben der lang erwarteten partiellen Funktionsanwendung zieht diese Version vor allem die Sicherheitseinstellungen für Sessions deutlich an, eine Änderung, die jede PHP-Anwendung beim Upgrade betrifft.
Ein fünfter Release Candidate vor dem Stable-Release
RC5 folgt auf RC4 vom 21. Oktober, der bereits zwei kritische Remote-Code-Execution-Lücken schloss. Der Zeitplan von PHP 8.6 zog sich über mehrere Testmonate: RC2 eröffnete den Zyklus am 24. September, nachdem RC1 wegen eines Packaging-Fehlers verworfen worden war, gefolgt von RC3 Anfang Oktober und RC4 Ende Oktober. Das Release-Team betont, dass RC5 weiterhin eine Testversion ist und nicht produktiv eingesetzt werden sollte.
Partielle Funktionsanwendung und neue Hilfsfunktionen
Die meistdiskutierte Neuerung ist die partielle Funktionsanwendung, basierend auf einem RFC, das 2021 abgelehnt wurde, bevor es in neuer Form einstimmig angenommen wurde. Damit lassen sich Argumente über einen Platzhalter auslassen, ohne eine zwischengeschaltete Closure zu schreiben. Die Sprache erhält zudem eine Funktion clamp(), um einen Wert auf einen Bereich zu begrenzen, und readonly-Eigenschaften können nun Standardwerte deklarieren, was bis einschließlich 8.5 ein Kompilierfehler war.
final class Pricing
{
public readonly float $vatRate = 0.20;
public function clampedDiscount(float $requested): float
{
return clamp($requested, 0.0, 0.30);
}
}
$applyVat = fn (float $amount, float $rate) => $amount * (1 + $rate);
$applyDefaultVat = $applyVat(?, 0.20); // partielle Anwendung
echo $applyDefaultVat(49.0);
Ein neues Subsystem für asynchrone Ein- und Ausgabe
PHP 8.6 führt Io\Poll ein, eine einheitliche Polling-Schnittstelle oberhalb der nativen Mechanismen jeder Plattform (epoll unter Linux, kqueue unter BSD und macOS, WSAPoll unter Windows). Sie bringt Klassen wie Io\Poll\Context und Io\Poll\Watcher mit, bestehende Streams lassen sich über StreamPollHandle anbinden. Closures profitieren außerdem von einem Cache für zustandslose Closures, und array_map() mit einem First-Class-Callable wird nun zu einer äquivalenten foreach-Schleife kompiliert, ohne zwischengeschaltete Allokationen.
Strengere Standardwerte für Sessions
Die folgenreichste Änderung für bestehende Anwendungen betrifft drei session-bezogene INI-Einstellungen, die nun standardmäßig sicherer sind.
| Einstellung | Vor 8.6 | Ab 8.6 | Auswirkung ohne Anpassung |
|---|---|---|---|
session.use_strict_mode | 0 | 1 | Ein eigener Handler, der extern übergebene, nicht gespeicherte Session-IDs akzeptiert, muss validateId() oder create_sid() implementieren |
session.cookie_httponly | 0 | 1 | Das Session-Cookie ist nicht mehr per JavaScript lesbar, sofern nicht explizit auf 0 zurückgesetzt |
session.cookie_samesite | nicht gesetzt | Lax | Seitenübergreifende POST-Anfragen erhalten das Cookie nicht mehr, außer bei Umstellung auf None zusammen mit cookie_secure=1 |
Drei Session-Einstellungen wechseln standardmäßig von einem freizügigen zu einem restriktiven Verhalten, ohne dass Anwendungscode geändert werden muss, um davon zu profitieren.
Weitere Änderungen lohnen vor der Migration einen Blick in die UPGRADING-Datei: Zahlreiche Funktionen werfen nun bei einem NUL-Byte in einem String-Argument eine ValueError, und preg_grep() liefert bei einem PCRE-Ausführungsfehler false statt eines teilweisen Arrays. Teams, die ihre Warteschlangen bereits genau im Blick behalten, so wie Laravel es bei seiner Queue-Überwachung getan hat, sollten ihre Testsuite schon jetzt gegen RC5 laufen lassen.
Das Wichtigste in Kürze
PHP 8.6 geht mit RC5 vom 5. November in die Zielgerade vor dem Stable-Release am 19. Partielle Funktionsanwendung und die Io\Poll-API sind die sichtbarsten Neuerungen, doch konkreten Handlungsbedarf schafft vor allem die Verschärfung der Session-Standardwerte. Teams mit eigenen Session-Handlern oder seitenübergreifenden Abläufen sollten jetzt testen, statt das Problem erst im Produktivbetrieb zu entdecken.
Bei den in diesem Jahr begleiteten Projekten ist die Umstellung von session.cookie_samesite auf Lax genau die Art von Änderung, die im Test unbemerkt bleibt und drei Wochen später als rätselhaftes Support-Ticket zu einem defekten Webhook oder SSO wieder auftaucht. Besser im Voraus und in Ruhe klären als am Tag des Deployments unter Zeitdruck — Simon Janvier.
Weiterführend: die offizielle Ankündigung von PHP 8.6.0 RC5 auf php.net.
