PHP 8.5 introduit l'opérateur pipe (|>)
(thephp.foundation)- L'opérateur pipe (|>) a été officiellement ajouté à PHP 8.5, rendant possible un chaînage dans le style de la programmation fonctionnelle.
- L'opérateur pipe agit comme un syntactic sugar en transmettant la valeur de gauche comme argument de la fonction callable de droite, et permet d'écrire des pipelines de transformation de données complexes de manière concise.
- Un code qui nécessitait autrefois des appels imbriqués ou un usage excessif de variables temporaires devient une expression chaînée plus lisible, améliorant fortement la maintenabilité et la réutilisabilité.
- Inspiré par des fonctionnalités similaires de langages fonctionnels tels que F#, OCaml et Elixir, il a finalement été adopté officiellement en 2025 dans PHP après plusieurs propositions et améliorations.
- L'opérateur pipe sera étroitement lié aux futures extensions du paradigme fonctionnel, notamment à la partial function application (application partielle de fonction), à l'opérateur de composition de fonctions, etc.
- En prévision de PHP 8.5 (novembre 2025), le petit changement souvent demandé par la communauté, l'opérateur pipe (|>) a été ajouté, avec un important potentiel malgré sa simplicité.
- Son implémentation est simple, mais cette fonction est considérée comme un bond exponentiel de l'expressivité du code.
Qu'est-ce que l'opérateur pipe de PHP 8.5 ?
- L'opérateur pipe
|>est un opérateur simple qui passe la valeur de gauche comme argument à la fonction à droite.- Un syntactic sugar pour simplifier l'entrée des paramètres d'une fonction.
- Exemple :
$result = "Hello World" |> strlen(...); // Ce code a la même signification que celui-ci $result = strlen("Hello World") - Il est possible d'enchaîner plusieurs fonctions, ce qui permet d'écrire le pipeline de transformation de données ligne par ligne.
$result = $arr |> fn($x) => array_column($x, 'tags') |> fn($x) => array_merge(...$x) |> array_unique(...) |> array_values(...); - Avec l'approche classique, le code devenait complexe en imbriquant les appels, ou devait déclarer de nombreuses variables temporaires.
- Cet opérateur est conçu de manière similaire au pipe (
|) des shells Unix/Linux, ce qui lui confère une grande intuitivité.
Historique et contexte d'introduction
- Il s'agit d'un concept proche du pipe dans des langages fonctionnels tels que F#, OCaml et Elixir.
- PHP disposait déjà de plusieurs bibliothèques offrant des fonctionnalités similaires, mais elles provoquaient des problèmes de perte de performance et de complexité.
- Issu de Hack/HHVM (le fork PHP de Facebook), il a connu plusieurs rejets de RFC dans PHP après une première proposition en 2016.
- Finalement, en 2025, il est devenu officiellement une syntaxe standard, relié aux fonctionnalités déjà introduites comme les First Class Callables (syntaxe d'appel de fonctions via tableau).
Cas d'utilisation et caractéristiques
- Dans des traitements complexes de tableaux, de chaînes de caractères ou de flux de données, il permet désormais de lier des fonctions de manière intuitive sans variables temporaires.
- Il peut être utilisé en chaîne même dans des contextes qui n'autorisent qu'une expression unique, comme
match(), maximisant ainsi la portée du code. - À droite de l'opérateur, il est possible d'utiliser non seulement des appels de fonctions, mais aussi des closures et des retours de fonctions d'ordre supérieur.
Renforcement du paradigme fonctionnel
- Le pipe peut être combiné avec n'importe quelle fonction, closure ou fonction d'ordre supérieur.
- Exemple : il s'intègre naturellement avec des patterns fonctionnels variés, comme le chaînage conditionnel (null-safe), les Maybe Monad, le traitement de flux, etc.
- Un pipeline null-safe peut aussi être implémenté avec le pipe et des fonctions d'ordre supérieur comme
maybe().
Perspectives d'évolution
- La combinaison avec la partial function application (application partielle) est prévue, et devrait permettre des combinaisons de fonctions encore plus variées.
- Un opérateur de composition est également proposé ; il permettrait de combiner en une seule opération des chaînes
mapmultiples, avec une optimisation potentielle.
L'opérateur pipe offre une innovation en termes de productivité, lisibilité et extensibilité qui dépasse une simple addition syntaxique, et on s'attend à ce que l'écriture en style de programmation fonctionnelle sous PHP 8.5 devienne beaucoup plus puissante.
Aucun commentaire pour le moment.