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
6 Kommentare
Ich schreibe es trotzdem nicht...
Sieht gut aus. Ich habe gehört, dass es dazu auch bei Python Diskussionen gibt; ich hoffe, dass dort eine ähnliche Funktion eingeführt wird.
PHP 8.5 (voraussichtlicher Termin November 2024) -> PHP 8.5 (voraussichtlicher Termin November 2025)
Aus einer Sprache voller „Liebe und Hass“ wird PHP immer mehr zu einer Sprache, über die man wieder nachdenken sollte...!
Gefällt mir... Ich beneide dich...
Bitte fügen Sie es auch in ECMA ein~~~