PHP 8.6.0 RC3 wurde am 8. Oktober 2026 getaggt. Der Releaseplan sieht die allgemeine Verfügbarkeit für den 19. November 2026 vor, RC4 und RC5 sind weiterhin eingeplant. Bis zur finalen Version können sich Details ändern. Die Einschätzung stützt sich auf UPGRADING und NEWS aus dem RC3-Tag sowie auf den tatsächlich integrierten Code. Der Recherchestand ist der 11. Oktober 2026.
Die auffälligste Neuerung ist die partielle Funktionsanwendung. Sie wurde einstimmig angenommen und in alpha3 integriert. Ein Aufruf mit ? für genau ein fehlendes Argument oder ... für null oder mehrere verbleibende Argumente erzeugt eine Closure. strlen(...) folgt konzeptionell demselben Prinzip ohne gebundene Argumente. Bei array_map() können solche Aufrufe direkter formuliert werden. UPGRADING vermerkt dafür eine kompilierte Schleife, wenn array_map() eine First-Class Callable oder eine partielle Anwendung erhält.
Der in PHP 8.5 eingeführte Pipe-Operator verlangt rechts eine Funktion mit genau einem Argument. Partielle Anwendung macht bei mehreren festen Argumenten eine Arrow Function überflüssig. Steht eine partielle Anwendung mit einem Platzhalter direkt hinter |>, kann der Compiler einen direkten Funktionsaufruf erzeugen, ohne eine Closure anzulegen. Bei zwei oder mehr Platzhaltern wird weiterhin eine Closure erstellt.
Gebundene Argumente werden beim Erzeugen der partiellen Anwendung ausgewertet. Eine Arrow Function wertet ihren Rumpf bei jedem Aufruf aus. Das ist bei Ausdrücken wie date('H:i:s') relevant. Jeder ?-Platzhalter erzeugt einen Pflichtparameter, auch wenn das ursprüngliche Parameter einen Standardwert besitzt. Argumente aus ... behalten ihre Optionalität. Nicht abgedeckte optionale Parameter verwenden weiterhin ihre Defaults. Beispiele älterer RFC-Texte entsprechen deshalb nicht mehr dem Verhalten von RC3.
Readonly-Properties dürfen nun Standardwerte deklarieren, auch in readonly classes. Der Default gilt als erste Initialisierung, deshalb darf der Konstruktor die Property nicht erneut setzen. Für konfigurierbare Werte eignet sich ein promoted constructor parameter mit Default. __clone() und clone-with dürfen die Property einmal neu initialisieren. clamp(mixed $value, mixed $min, mixed $max): mixed verwendet die normalen PHP-Vergleiche und funktioniert auch mit Strings und DateTimeInterface-Objekten. Bei einer umgekehrten Grenze oder einer NAN-Grenze wirft die Funktion ValueError.
Time\Duration ist eine finale readonly class für exakt nanosekundengenaue Zeitspannen. Benannte Factory-Methoden erzeugen Instanzen aus Sekunden, Minuten oder ISO-8601-Dauerstrings. Vergleiche sowie add() und sub() werden unterstützt. Die Operatoren + und - stehen nicht zur Verfügung. Eine Verbindung zu DateTime oder DateInterval fehlt, und Funktionen wie sleep() akzeptieren Duration nicht. Der aktuelle Nutzen liegt in typisierten Timeout-Konfigurationen und in der Polling-API.
Die neuen Sitzungsdefaults bergen das größte unmittelbare Migrationsrisiko. session.use_strict_mode wechselt von 0 auf 1, session.cookie_httponly von 0 auf 1 und session.cookie_samesite von einem nicht gesetzten Wert auf Lax. PHP weist fremde Session-IDs zurück, JavaScript verliert den Zugriff über document.cookie und Cookies werden bei Cross-Site-POST-Anfragen nicht mehr mitgesendet. Benutzerdefinierte Session-Handler, geteilte Sessions über Subdomains oder Dienste, SAML-POST-Bindings und Payment-Callbacks brauchen End-to-End-Tests. Anwendungen mit den alten Werten sollten sie explizit setzen.
Die Argumentvalidierung wird im gesamten Laufzeitsystem strenger. Ungültige Modi und Flags betreffen unter anderem array_filter(), array_change_key_case(), pathinfo() und scandir(). Außerhalb des erlaubten Bereichs liegende Werte können bei number_format(), sleep() und usleep() ValueError auslösen. NUL-Bytes in getenv(), putenv(), parse_str(), setlocale() sowie in Dateifunktionen wie file_exists(), is_file(), filesize() und stat() führen nun zu Exceptions. Früher wurden solche Werte teilweise abgeschnitten oder still abgewiesen. trim(), ltrim() und rtrim() entfernen standardmäßig außerdem Form Feed. base_convert(), bindec(), hexdec() und octdec() melden ungenaue Umwandlungen per Notice, preg_grep() liefert bei einem Ausführungsfehler false. Auch GMP, Intl, GD, Sodium und weitere Extensions verschärfen ihre Prüfungen.
Die neue INI-Option error_include_args ergänzt Fehlermeldungen um Funktionsargumente und ist standardmäßig deaktiviert. Mit #[\SensitiveParameter] markierte Werte werden ausgeblendet, andere Argumente können in Logs erscheinen. Bei einem harten Out-of-Memory-Fehler ruft PHP nun abort() auf. Der Prozess endet dann mit Exit-Code 134, eventuell entsteht ein Core-Dump. Supervisoren und Alarmierungen, die Exit-Codes auswerten, müssen geprüft werden. Ein by-reference foreach kann Elemente nach einer Array-Komprimierung erneut besuchen. ?? und empty() rufen bei Magic Properties __get() nicht mehr auf, wenn __isset() die Property bereits geschrieben hat.
Die meisten Deprecations bereiten PHP 9 vor. Die skalaren Aliase is_integer(), is_long(), is_double() und doubleval() erhalten kanonische Ersatzfunktionen. spl_object_hash() wird durch spl_object_id() ersetzt. Das Ergebnis ist eine Ganzzahl, was für serialisierte Daten und Cache-Keys relevant ist. Das dritte Argument von define(), spl_classes() und mysqli_get_charset() ist deprecated. Rückgaben aus finally, Rückgabewerte aus __construct() oder __destruct(), String-Aufrufe von is_a() oder is_subclass_of() bei deaktiviertem allow_string sowie Objekte an array_walk() oder http_build_query() erfordern eine Prüfung der Absicht.
Mehrere Sortier-, Flag- und Serialisierungs-Methoden von ArrayIterator sind betroffen, darunter asort(), ksort(), uasort(), setFlags() und serialize(). Bei SplFileObject betrifft die Deprecation CSV-Methoden wie fgetcsv(), fputcsv(), setCsvControl() und getCsvControl(). Auch eigene Session-Handler ohne create_sid() und validateId() gehören dazu. mbregex ist strategisch wichtig, weil die Oniguruma-Bibliothek nicht mehr gewartet wird. Die Familie um mb_ereg(), mb_eregi(), mb_ereg_replace(), mb_split() und mb_regex_encoding() ist deprecated und soll in PHP 9.0 entfernt werden. Eine Migration zu PCRE mit dem u-Modifikator ist häufig möglich, die Dialekte unterscheiden sich jedoch und brauchen Tests. Die geplanten Deprecations für list() und den gettext-Alias _() scheiterten an der Abstimmung.
Io\Poll ergänzt ein objektorientiertes Event-Loop-Grundelement. Es bietet Context, automatische Backends für epoll, kqueue, poll, event ports und WSAPoll, typisierte Watcher für Stream-Handles sowie wait() mit einem Time\Duration-Timeout. Die RFC-Seite zeigt bei wait() weiterhin die ältere Integer-Signatur. Die API richtet sich an Async-Runtimes, Socket-Server und Prozessmanager. Stream-Kontexte können Fehler über StreamErrorMode::Exception als Exceptions melden. HTTP-Clients, Storage-Adapter und Import-Jobs erhalten dadurch eine fangbare StreamException mit den gesammelten Fehlern. Standardmäßig bleiben Warnungen aktiv.
Die URI-Extension erhält fluente Uri\Rfc3986\UriBuilder- und Uri\WhatWg\UrlBuilder-Klassen, Prüfungen für Host- und URI-Typen sowie eine WHATWG-Funktion für Prozentkodierung. Das hilft bei Redirects, signierten URLs und SSRF-Prüfungen. Zu den Performance-Arbeiten gehören Caching zustandsloser Closures, kompilierte printf()- und array_map()-Aufrufe, eine schnellere TAILCALL-VM unter Windows mit Clang, schnelleres JSON-Encoding sowie schnellere Array- und String-Funktionen. Die Gewinne dürften inkrementell ausfallen und vom Workload abhängen.
True Async fehlt, weil der RFC zurückgezogen wurde. Eine automatische Erkennung statischer Closures wurde nicht integriert. Aus dem RFC zur Closure-Optimierung kam nur das Caching zustandsloser Closures; explizit als static markierte Closures erhalten den vollen Vorteil. SortDirection führt Ascending und Descending ein, doch bestehende Sortierfunktionen verwenden weiter SORT_ASC und SORT_DESC. Auch die scandir()-Konstanten bleiben bestehen. Die neue Reflection-Methode heißt ReflectionProperty::isWritable().
Für das Upgrade empfiehlt sich zuerst ein vollständiger RC-Lauf in CI mit sichtbaren E_DEPRECATED-Meldungen und eine Prüfung der PHP-8.6-Unterstützung aller Abhängigkeiten. Die effektive Session-Konfiguration sollte verglichen werden, danach folgen End-to-End-Tests für Login, SSO und Payment-Callbacks. User-Input an Datei-, Umgebungs- und Locale-Funktionen braucht Fehlerpfade. mbregex, return in finally und veraltete SPL-Methoden sollten erfasst und eingeplant werden. Vor dem Rollout sollte eine Staging-Umgebung mit produktionsnahem Traffic Fehlerlogs und Exit-Codes überwachen. Codebasen mit mehreren übersprungenen PHP-Versionen benötigen zusätzlich einen umfassenderen Migrationsplan.




Kommentare
Noch keine Kommentare — schreib den ersten.
Starte die Diskussion
Kein Konto, kein Passwort nötig — gib einfach deine E-Mail-Adresse ein, wir senden dir einen einmaligen Anmelde-Link. Beim ersten Mal bist du damit automatisch angemeldet.
Deine Bewertung wird nach der Anmeldung automatisch übernommen.
Schau in dein Postfach
Wir haben einen Anmelde-Link an … gesendet. Öffne ihn auf diesem Gerät — dieser Tab meldet dich automatisch an.
Nichts angekommen? Wirf einen Blick in den Spam-Ordner — und markiere die Mail dort als „Kein Spam“, dann landet sie künftig direkt im Postfach.