PHP 8.5 führt den Pipe-Operator (|>) ein
(thephp.foundation)- In PHP 8.5 wurde der Pipe-Operator (|>) offiziell ergänzt, wodurch ein funktionaler Verkettungsstil möglich wird
- Der Pipe-Operator dient als Syntax-Sugar, da er den Wert links als Argument einer rechten Funktion (callable) übergibt und so komplexe Datenverarbeitungspipelines deutlich kompakter formuliert werden können
- Code, der vorher verschachtelte Aufrufe oder ein Übermaß an temporären Variablen erforderte, wird zu einem gut lesbaren Kettenausdruck, was Wartbarkeit und Nutzbarkeit deutlich verbessert
- Er wurde von ähnlichen Features in F#, OCaml und Elixir inspiriert und nach mehreren Vorschlägen und Verbesserungen in PHP 2025 endlich offiziell eingeführt
- Der Pipe-Operator wird in Zukunft eng mit Partial Function Application (partieller Funktionsanwendung) und einem Kompositionsoperator im funktionalen Stil verknüpft werden
- In PHP 8.5 (voraussichtlich November 2025) ist der lange erwartete, kleine aber potenziell große Pipe-Operator (|>) aufgenommen, der von der Community seit langem eingefordert wurde
- Die Implementierung ist einfach, wird aber als Funktion gesehen, die die Ausdruckskraft des Codes sprunghaft erhöht
Was ist der Pipe-Operator in PHP 8.5?
- Der Pipe-Operator
|>ist ein einfacher Operator, der den Wert links als Argument an die Funktion auf der rechten Seite übergibt- Er vereinfacht als Syntax-Sugar die Parameterübergabe von Funktionen
- Beispiel:
$result = "Hello World" |> strlen(...); // Diese Anweisung hat dieselbe Bedeutung wie: $result = strlen("Hello World") - Mit mehreren Funktionen als Kette können Daten-Pipelines zeilenweise aufgebaut werden
$result = $arr |> fn($x) => array_column($x, 'tags') |> fn($x) => array_merge(...$x) |> array_unique(...) |> array_values(...); - Nach herkömmlicher Methode musste solch komplexer Code oft verschachtelt werden oder viele temporäre Variablen deklarieren
- Der Operator ist ähnlich wie die Unix/Linux-Shell-Pipe (|) gestaltet, was seine Intuitivität erhöht
Hintergrund und Entstehungsgeschichte
- Er ist ein Konzept ähnlich den Pipe-Mechanismen in funktionalen Sprachen wie F#, OCaml und Elixir
- In PHP gab es bereits mehrere Bibliotheken mit ähnlichen Funktionen, doch diese führten zu Performance-Einbußen und Komplexität
- Die Idee stammt aus Hack/HHVM (dem PHP-Fork von Meta/Facebook); nach dem ersten Vorschlag 2016 wurden in PHP mehrere RFCs abgelehnt
- Er wurde 2025 endlich als Standard-Syntax übernommen und mit früher eingeführten Features wie First Class Callables (Array-Call-Syntax) verknüpft
Einsatzszenarien und Merkmale
- Bei komplexer Array-Verarbeitung, String-Manipulation und Datenstrom-Verarbeitung ist intuitives Funktion-Chainen ohne temporäre Variablen möglich
- Auch in Kontexten, die nur einen einzigen Ausdruck erlauben, etwa
match(), kann die Kette genutzt werden und die Nutzbarkeit steigt dadurch deutlich - Auf der rechten Seite sind nicht nur Funktionsaufrufe möglich, sondern auch Closure-Rückgaben, Higher-Order-Functions und weitere Muster
Stärkung des funktionalen Paradigmas
- Die Pipe kann mit beliebigen Funktionen, Closures und Higher-Order-Funktionen kombiniert werden
- Beispiele sind bedingte (Null-safe) Ketten, Maybe Monad, Stream-Verarbeitung und weitere funktionale Muster, die sich dadurch natürlich integrieren lassen
- Mit der Pipe zusammen mit einem Higher-Order-Function wie
maybe()lassen sich auch Null-Safe-Pipelines realisieren
Zukünftige Entwicklung
- Durch die Kombination mit Partial Function Application (teilweiser Funktionsanwendung) werden künftig deutlich mehr Funktionskombinationen möglich sein
- Ein Kompositionsoperator (composition operator) ist ebenfalls vorgeschlagen, wodurch sich etwa mehrere
map-Schritte zu einer Kette zusammenfassen lassen
Der Pipe-Operator bringt eine Produktivitäts-, Lesbarkeits- und Erweiterungsrevolution, die über eine bloße Syntaxergänzung hinausgeht; mit PHP 8.5 wird das Schreiben von Code im funktionalen Stil wesentlich leistungsfähiger
Noch keine Kommentare.