PHP 8.6 Update: True Async gescheitert, PFA bestätigt

PHP 8.6 Update: True Async gescheitert, PFA bestätigt

True Async hat im Februar 2026 die nötige Zweidrittel-Mehrheit verfehlt. PFA ist mit 33:0 bestätigt und in Alpha 1 (2. Juli 2026) verfügbar. Die Polling API (Io\Poll, Status: Implemented) liefert einheitliche I/O-Infrastruktur für AMPHP, ReactPHP und Revolt ohne Code-Änderungen. GA: 19. November 2026.

Dennis Schwenker-Sanders 7 Min. Lesezeit

Im März 2026 habe ich in diesem Blog beschrieben, warum True Async und Partial Function Application die wichtigsten PHP-8.6-Kandidaten sind. Drei Monate später sieht die Lage anders aus: True Async hat die nötige Zweidrittel-Mehrheit im RFC-Voting nicht erreicht. PFA dagegen ist mit einer einstimmigen Abstimmung bestätigt. Und ein dritter RFC, der kaum Aufmerksamkeit bekam, wurde still implementiert und verändert die Async-Infrastruktur in PHP grundlegend.

Was Sie in 8 Minuten erfahren:

  1. Warum True Async im Februar 2026 gescheitert ist und welche Argumente die Gegner überzeugten
  2. Was die Polling API (Status: Implemented) für AMPHP, ReactPHP, Revolt und Symfony Messenger bedeutet
  3. Was PFA mit 33:0 jetzt konkret liefert und wann PHP 8.6 GA erscheint

Wer meinen März-Artikel zu PHP 8.6 gelesen hat, findet hier das Update. Ich habe den ursprünglichen Artikel nicht nachträglich geändert, weil er eine historische Momentaufnahme darstellt und die Suchtreffer erhalten bleiben sollen. Dieser Artikel ersetzt ihn inhaltlich. Am Ende des März-Artikels verweist ein Aktualisierungshinweis auf diesen Text.

PHP 8.6 Alpha 1 startet am 2. Juli 2026. GA ist für den 19. November 2026 geplant. Die Roadmap ist klar, die Feature-Liste auch. Was sich geändert hat, ist welche dieser Features überhaupt in der Liste stehen.

PHP 8.6 Status-Tabelle: Was kommt, was nicht


Feature

Status

Abstimmung

Verfügbar ab

Partial Function Application (PFA)

Bestätigt, implementiert

33:0

Alpha 1 (02.07.2026)

Polling API (Io\Poll)

Implemented

Angenommen (19:0 auf Kurs)

PHP 8.6

True Async (spawn/await)

Abgelehnt

Nötige 2/3 nicht erreicht

Nicht in 8.6

Betrifft Sie das? Schnelltest in 30 Sekunden

PFA direkt relevant wenn: Ihr Team funktionalen PHP-Code schreibt, Higher-Order Functions nutzt oder Symfony-Command-Pipelines mit Callbacks aufbaut.

Polling API relevant wenn: Sie AMPHP, ReactPHP, Revolt oder FrankenPHP einsetzen. Der Benefit kommt ohne Code-Änderungen.

Kein Handlungsbedarf jetzt wenn: Sie auf PHP 8.3 oder 8.4 laufen und kein Upgrade bis Ende 2026 planen. Die Features werden relevant, wenn PHP 8.6 GA erscheint.

PHP-Roadmap und Ihre Architektur-Entscheidungen

Was das Ende von True Async und die Polling API für Ihre Event-Loop-Architektur bedeuten – ich helfe Ihnen das einzuordnen.

  • PHP-Entwicklung seit Version 5.3
  • Async-Architekturen mit Symfony Messenger
Kostenlosen Check anfragen →

⏱️ Antwort binnen 24 Stunden

Warum ist True Async gescheitert?

Der True Async RFC scheiterte am 16. Februar 2026 daran, dass die nötige Zweidrittel-Mehrheit nicht erreicht wurde. Der RFC ist auf wiki.php.net/rfc/true_async als nicht angenommen dokumentiert.

Drei Argumente dominierten die Gegner-Seite:

Komplexität im Engine-Core: Spawn und await erfordern tiefgreifende Änderungen in der Zend-Engine-Architektur. Die Befürworter argumentierten, Fibers hätten das vorbereitet. Die Gegner sahen das anders: Fibers sind kooperativ und explizit, True Async würde implizite Unterbrechungspunkte in regulärem PHP-Code einführen.

Memory-Model-Fragen: PHP hat ein Execution-Modell, das auf Share-Nothing basiert. Jeder Request ist isoliert. True Async erzeugt parallele Ausführungspfade innerhalb desselben Prozesses. Was passiert mit Globals? Mit statischen Klassen-Properties? Mit Thread-Local-Storage? Die RFC-Autoren hatten Antworten, aber die Abstimmenden sahen das Risiko für unbekannte Edge-Cases als zu hoch.

Kulturelle Zurückhaltung: PHP ist in seiner Identität eine synchrone Sprache. Viele Kern-Entwickler sehen AMPHP, ReactPHP und Revolt als den richtigen Weg für Async-PHP, nicht eine Sprach-Level-Änderung. Ein Kommentar auf PHP Internals brachte es auf den Punkt: "We already have Fibers. Let the ecosystem build on top."

KurzTrue Async ist gescheitert: Nicht weil die Idee falsch war, sondern weil die PHP-Community Fibers + Revolt als ausreichende Antwort sieht und Engine-Risiken vermeiden will.

Was ist die Polling API und warum ist sie der stille Gewinner?

Der Polling API RFC (Autor: Jakub Zelenka) hat den Status Implemented. Er läuft unter dem Radar, ist aber architektonisch bedeutsamer als True Async es gewesen wäre, weil er das unterste Fundament legt, auf dem alle PHP-Async-Lösungen aufbauen.

Das Problem, das er löst: PHP hat bisher nur stream_select() für I/O-Multiplexing, basierend auf dem alten select()-Systemaufruf. Maximales File-Descriptor-Limit: 1.024. O(n) Komplexität. Kein Zugang zu epoll (Linux), kqueue (BSD/macOS) oder anderen modernen Polling-Mechanismen.

Das Ergebnis: AMPHP, ReactPHP und Revolt pflegen jeweils eigene Backend-Implementierungen (StreamSelect, ExtUv, ExtEvent, ExtEv), um auf modernen Polling-APIs aufzusetzen. Unterschiedliche Libraries, unterschiedliche Backends, kein einheitlicher Pfad.

// Polling API: neues Io\Poll Namespace in PHP 8.6
use Io\Poll\Context;
use Io\Poll\StreamPollHandle;
use Io\Poll\Event;

$context = new Context(); // wählt automatisch bestes Backend:
// epoll (Linux), kqueue (BSD/macOS), WSAPoll (Windows)

$handle = new StreamPollHandle($socket);
$watcher = $context->add($handle, [Event::Read, Event::Write]);

// Blockiert bis Event oder Timeout
$events = $context->wait(seconds: 0, microseconds: 500_000);

// Libraries wie AMPHP, ReactPHP, Revolt können das nutzen
// als einziges Backend statt 4 verschiedene zu pflegen

Der RFC ist klar in seiner Priorisierung: Die primäre Motivation ist ein internes API für PHP-Core und Extensions. Signal-Handling in FrankenPHP's ZTS-Mode, FPM-Worker-Event-Handling, plattformübergreifende Timer. Der Userspace-Teil (Io\Poll) ist der sekundäre Benefit.

Für Agenturen, die Symfony Messenger mit AMPHP oder Revolt betreiben: Die Polling API vereinheitlicht den Event-Loop-Unterbau, ohne dass Ihr Code sich ändert. Die Libraries werden ihre Backends auf Io\Poll migrieren.

Wie ich im Symfony 8.1-Artikel beschrieben habe, gehen HTTP-Less Applications und Fiber-basierte Worker in die gleiche Richtung. Die Polling API ist die Infrastruktur, die das langfristig trägt.

KurzDie Polling API liefert das, was True Async verspricht, ohne die Sprache zu verändern: einheitliche, hochperformante I/O-Infrastruktur als PHP-Core-API. AMPHP, ReactPHP und Revolt profitieren ohne Code-Änderungen.

⚡ Async-Architektur mit Symfony Messenger?

Ich helfe Ihnen einzuschätzen, ob Ihr aktuelles Messenger-Setup von der Polling API profitiert und welche Anpassungen sinnvoll sind.

  • Symfony Messenger und Event-Loop-Architekturen
  • FrankenPHP und Revolt im Einsatz
Architektur besprechen →

⏱️ Antwort binnen 24 Stunden

📞 Oder direkt anrufen: 04481 - 9099658

PFA: Was die 33:0-Abstimmung jetzt konkret bedeutet

Partial Function Application (PFA) ist mit 33 Ja-Stimmen, 0 Gegenstimmen bestätigt und implementiert. Das ist die einstimmigste Abstimmung in der PHP-8.6-Entwicklungsphase. Für PHP-Internals-Verhältnisse ist das ein klares Signal: Die Community war lange uneinig über den richtigen Ansatz, der endgültige Vorschlag überzeugte alle.

// PFA: Partial Function Application (PHP 8.6, Alpha 1 ab 02.07.2026)
function multiply(int $a, int $b): int
{
return $a * $b;
}

// Partial Application: erstes Argument fixieren
$double = multiply(2, ...); // Platzhalter = ...
$triple = multiply(3, ...);

echo $double(5); // 10
echo $triple(5); // 15

// Nützlich in Array-Funktionen:
$prices = [10.00, 25.50, 8.99];
$withTax = array_map(multiply(1.19, ...), $prices);
// [11.90, 30.345, 10.6981]

Was viele unterschätzen: PFA ist nicht nur Syntax-Zucker. Es verändert, wie Callback-basierter Code strukturiert wird. Statt Closures für einfache Parametrisierungen zu schreiben (fn($x) => multiply(2, $x)), gibt es einen direkten Sprachkonstrukt. Das reduziert Closure-Overhead und macht Composer-Pipelines lesbarer.

Für Symfony-Projekte besonders relevant: Console-Commands, die Transformationspipelines über Arrays aufbauen, Middleware-Stacks, Twig-Filter-Callbacks. Überall dort, wo heute fn($x) => someFunction($fixedArg, $x) steht, kommt PFA.

KurzPFA (33:0) kommt in PHP 8.6 Alpha 1 am 2. Juli. GA am 19. November 2026. Der Platzhalter-Syntax ... ermöglicht saubere Callback-Pipelines ohne Closure-Boilerplate.

Was bedeutet das für Ihre Architektur-Entscheidungen?

Im März-Artikel hatte ich drei Empfehlungen gegeben, die sich durch das True-Async-Scheitern teilweise verschieben:

Stateless Services bleiben sinnvoll (für PFA). Pure Functions, keine Seiteneffekte, testbare Transformationen. Das zahlt auf PFA ein und war unabhängig von True Async richtig.

Das große Async-Refactoring kann entspannen. Wer geplant hatte, seinen Code für True Async umzustrukturieren (explizite async/await Markierungen), braucht das nicht. Fibers + Revolt + Symfony Messenger sind der stabile Weg. Die Polling API verbessert deren Performance ohne Code-Änderungen.

Wer jetzt AMPHP, ReactPHP oder Revolt einsetzt, profitiert ab PHP 8.6 von der Polling API als einheitlichem Unterbau. Kein manueller Extension-Wechsel, keine Konfiguration. Die Libraries werden das intern migrieren.

Aus der Praxis

Was mir bei Code-Reviews und Einarbeitungen in Bestandssysteme häufig begegnet: Teams, die auf True Async gewartet haben, bevor sie Async-Patterns einführen. Das war und ist keine gute Strategie. Symfony Messenger mit Revolt als Event-Loop läuft heute stabil. FrankenPHP macht Worker-based Execution ohne Extension möglich. Als Symfony-Entwickler, der beide Ansätze in Produktion kennt, ist mein Rat: Nicht auf RFC-Votes warten. Die Infrastruktur ist heute vorhanden.

Zusammenfassung

True Async ist gescheitert. Die nötige Zweidrittel-Mehrheit wurde nicht erreicht. Spawn und await kommen nicht in PHP 8.6. Die Argumente: Engine-Komplexität, Memory-Model-Risiken, Fibers als ausreichende Antwort.

Polling API ist implementiert. Io\Poll Namespace mit Context, Watcher, StreamPollHandle. Backends: epoll, kqueue, WSAPoll. AMPHP, ReactPHP und Revolt können auf ein einziges Backend migrieren. FrankenPHP ZTS profitiert sofort.

PFA kommt mit 33:0. Alpha 1 am 2. Juli 2026, GA am 19. November 2026. Platzhalter-Syntax ..., kein Closure-Overhead, saubere Pipelines.

Die Architektur-Empfehlung: Stateless Services und Pure Functions bleiben richtig. Symfony Messenger + Revolt ist der stabile Async-Weg. Kein Async-Refactoring aus Angst vor True Async nötig.

PHP 8.6 ist planbar. Ihre Architektur auch.

PFA, Polling API, Symfony Messenger, FrankenPHP. Was davon für Ihr Projekt relevant ist und wann Sie handeln müssen, klären wir zusammen.

  • PHP 8.6-Roadmap im Überblick
  • Async-Architektur mit Symfony und Revolt
  • GA: 19. November 2026
Nächsten Schritt klären →

Häufige Fragen

Kommt True Async in PHP 8.7 oder einer späteren Version?

Das ist offen. RFC-Votes sind keine permanenten Entscheidungen. Der RFC kann überarbeitet und erneut zur Abstimmung gestellt werden. Die Hauptkritikpunkte (Memory-Model, Engine-Komplexität) müssen dann adressiert sein. Ob das in PHP 8.7 passiert, ist nicht bekannt. Die Community hat signalisiert, dass sie Fibers und Revolt als ausreichende Antwort sieht. Ein überarbeiteter RFC wäre möglich, aber nicht wahrscheinlich in naher Zukunft.

Was ist der Unterschied zwischen Partial Function Application und Currying?

Currying transformiert eine Funktion mit n Argumenten in n verschachtelte Funktionen mit je einem Argument: f(a)(b)(c). Partial Function Application fixiert einen oder mehrere Parameter einer bestehenden Funktion zu einer neuen Funktion mit weniger Parametern: f(a, ...) liefert eine Funktion die noch b erwartet. PHP implementiert PFA, nicht Currying. Praktischer Unterschied: PFA ist einfacher und passt natürlicher zu PHPs typisiertem System.

Muss ich meinen AMPHP- oder Revolt-Code für PHP 8.6 anpassen?

Nein. Die Polling API ist eine interne Infrastruktur-Änderung. AMPHP, ReactPHP und Revolt werden ihre Backends intern auf Io\Poll migrieren. Ihr bestehender Code, der diese Libraries nutzt, läuft unverändert weiter. Die Performance-Verbesserung kommt ohne Anpassungen. Überprüfen Sie nach dem Library-Update die jeweiligen Changelogs auf PHP-8.6-spezifische Hinweise.

Was bringt die Polling API für FrankenPHP-Nutzer?

FrankenPHP nutzt eine goroutine-basierte TSRM-Mode, die bisher eigene Signal-Handling-Mechanismen erforderte. Die Polling API liefert ein standardisiertes Interface für safe, efficient signal handling in ZTS-Umgebungen, das ist einer der primären Motivationspunkte des RFC. Konkret bedeutet das stabileres Signal-Handling in FrankenPHP-Worker-Setups und eine engere Integration mit PHP-Core ohne externe Extension-Abhängigkeiten.

Wann erscheint PHP 8.6 und welche PHP-Versionen laufen parallel?

PHP 8.6 Alpha 1 erscheint am 2. Juli 2026, Feature Freeze und Beta 1 am 13. August 2026, GA am 19. November 2026. Parallel laufen zu diesem Zeitpunkt: PHP 8.4 (aktiv, Security-Support bis Dezember 2028), PHP 8.3 (Security-Only bis Dezember 2027), PHP 8.2 (Security-Only bis Dezember 2026). PHP 8.1 ist seit Dezember 2025 EOL. PHP 8.6 wird ab GA aktiv supported.

Artikel teilen: