PHP 8.0 bis 8.6 im Vergleich: Named Arguments, Enums, Property Hooks, Pipe Operator, Partial Function Application. Features, Support und Upgrade mit Rector.
Mehr erfahren
Ein Tag inhouse mit Benjamin Klein für Developer, Tester und Admins. Context Engineering, Harness, ADRs und zwei Hands on Blöcke mit KI Agenten in eurem Setup.
function tag(string $element, string $cssClass, string $content): string
{
return "<$element class=\"$cssClass\">$content</$element>";
}
$alert = tag('div', 'alert', ?);
echo $alert('Deine Sitzung ist abgelaufen.');
// <div class="alert">Deine Sitzung ist abgelaufen.</div>
$prices = [19.987, 5.512, 120.049];
// bisher
$rounded = array_map(fn (float $price) => round($price, 2), $prices);
// PHP 8.6
$rounded = array_map(round(?, 2), $prices);
$div = tag('div', ...);
echo $div('alert', 'Deine Sitzung ist abgelaufen.');
$alert = tag(element: 'div', cssClass: 'alert', content: ?);
$slug = ' PHP 8.6 Release Notes '
|> trim(...)
|> strtolower(...)
|> str_replace(' ', '-', ?);
// "php-8.6-release-notes"
$total = $lineItems
|> array_map(fn (Item $item) => $item->price, ?)
|> array_sum(...);
PFA is a core feature of a number of functional languages.
PHP 8.0 bis 8.6 im Vergleich: Named Arguments, Enums, Property Hooks, Pipe Operator, Partial Function Application. Features, Support und Upgrade mit Rector.
Mehr erfahren
Wir sind Experten für PHP und helfen Ihnen, Ihre digitalen Herausforderungen zu meistern. Unser erfahrenes Team unterstützt Sie bei PHP Updates, PHP Refactoring und berät Sie remote zu allen Fragen rund um PHP. Mit unseren vollautomatischen CI/CD Deployments und einer robusten Docker-Infrastruktur bringen wir Ihre PHP-Projekte auf das nächste Level. Vertrauen Sie auf unsere Expertise für zuverlässige und skalierbare PHP-Lösungen.
Partial Function Application ist ein Funktionsaufruf, bei dem Argumente durch die Platzhalter ? oder ... ersetzt werden. PHP führt die Funktion dann nicht aus, sondern liefert eine typisierte Closure, die nur noch die fehlenden Argumente erwartet. So ersetzt array_map(round(?, 2), $prices) eine komplette Arrow Function.
Partial Function Application kommt mit PHP 8.6. Das Release ist für den 19. November 2026 geplant, Release Candidates zum Testen gibt es schon. Die RFC von Larry Garfield und Arnaud Le Blanc wurde mit 33 zu 0 Stimmen angenommen und ist seit Alpha 3 im PHP Kern.
Das Fragezeichen steht für genau ein Argument, das später kommt. Die drei Punkte stehen für alle restlichen Argumente. Mit ? legt ihr also einzelne Stellen fest, mit ... lasst ihr den Rest offen. Beide lassen sich mit festen und benannten Argumenten kombinieren.
In vielen Callbacks und Pipes ja. Wo eine Arrow Function nur eine andere Funktion mit festen Argumenten aufruft, ist round(?, 2) kürzer und übernimmt die Typen automatisch. Für eigene Logik, Bedingungen oder mehrere Aufrufe bleibt die Arrow Function aber das richtige Werkzeug.
Der Pipe Operator aus PHP 8.5 braucht in jedem Schritt eine Funktion mit einem Parameter. Mit Partial Function Application markiert ein ? die Stelle, an der der Wert aus der Pipe ankommt. Steht der Aufruf direkt rechts vom Operator, kann PHP die Zwischen Closure sogar ganz weglassen.
Die First Class Callable Syntax aus PHP 8.1, etwa strtolower(...), erzeugt eine Closure für die ganze Funktion ohne vorbelegte Argumente. Partial Function Application ist die Erweiterung davon. Vor oder zwischen den Platzhaltern dürfen jetzt feste Argumente stehen.
Ja. Die Closure übernimmt Parameternamen, Typen, Rückgabetyp und Referenzverhalten der Originalfunktion. Reflection und statische Analyse sehen eine echte, typisierte Funktion. Das ist ein Vorteil gegenüber Arrow Functions, bei denen ihr die Typen selbst schreiben müsst.
Jedes Fragezeichen wird zu einem Pflichtparameter der Closure, auch wenn der Originalparameter einen Default hat. Parameter, die über die drei Punkte hereinkommen, bleiben optional und behalten ihren Default. Das regelt eine eigene Folge RFC zu optionalen Platzhaltern.
Sofort beim Erzeugen der Closure. Das ist ein Unterschied zur Arrow Function, die ihre Argumente erst beim Aufruf auswertet. Wenn ihr teure Funktionsaufrufe als festes Argument übergebt, laufen sie also schon beim Anlegen der Closure, nicht erst später.
Nein. Die RFC führt neue Syntax ein und listet keine inkompatiblen Änderungen. Bestehender Code läuft unverändert weiter. Ihr könnt das Feature schrittweise einführen, sobald eure Mindestversion PHP 8.6 ist und eure Werkzeuge die neue Syntax verstehen.
Prüft die Version eurer Werkzeuge, bevor ihr die Syntax nutzt. Statische Analyse, Rector und Code Style Tools brauchen Updates für neue Sprachfeatures. Ein Pipeline Job mit dem PHP 8.6 Release Candidate zeigt euch schnell, ob alles zusammenspielt, bevor neuer Code im Hauptzweig landet.
Nur, wenn eure Bibliothek PHP 8.6 als Mindestversion voraussetzt. Die Syntax lässt sich auf älteren Versionen nicht parsen. Für Pakete mit breiter Versionsunterstützung bleibt ihr also vorerst bei Arrow Functions und stellt erst um, wenn ihr ältere PHP Versionen nicht mehr unterstützt.