PHP 8.5 et versions ultérieures prennent en charge un opérateur qui fonctionne directement
sur les fonctions callables. L'opérateur |>, ou « pipe », accepte
une fonction callable à un seul paramètre à droite et lui transmet la valeur de gauche,
le résultat étant la valeur renvoyée par la fonction callable. La fonction callable de
droite peut être n'importe quelle fonction callable PHP valide : une Closure,
une fonction callable de première classe
, un objet qui implémente __invoke(), etc.
Cela signifie que les deux lignes suivantes sont logiquement équivalentes.
Exemple #1 En utilisant |>
<?php
$result = "Hello World" |> strlen(...);
echo $result, PHP_EOL;
$result = strlen("Hello World");
echo $result, PHP_EOL;
?>L'exemple ci-dessus va afficher :
11 11
Pour un seul appel, cette fonction n'est pas particulièrement utile. Cela devient utile lorsque plusieurs appels sont enchaînés. Autrement dit, les deux fragments de code suivants sont logiquement équivalents :
Exemple #2 Enchaînement d'appels |>
<?php
$result = "PHP Rocks"
|> htmlentities(...)
|> str_split(...)
|> (fn($x) => array_map(strtoupper(...), $x))
|> (fn($x) => array_filter($x, fn($v) => $v != 'O'))
;
echo $result, PHP_EOL;
$temp = "PHP Rocks";
$temp = htmlentities($temp);
$temp = str_split($temp);
$temp = array_map(strtoupper(...), $temp);
$temp = array_filter($temp, fn($v) => $v != 'O');
$result = $temp;
echo $result, PHP_EOL;
?>L'exemple ci-dessus va afficher :
Array
(
[0] => P
[1] => H
[2] => P
[3] =>
[4] => R
[6] => C
[7] => K
[8] => S
)
Array
(
[0] => P
[1] => H
[2] => P
[3] =>
[4] => R
[6] => C
[7] => K
[8] => S
)
La partie gauche de l'opérateur de pipeline peut être n'importe quelle valeur ou expression. La partie droite peut être n'importe quelle callable PHP valide acceptant un seul paramètre, ou toute expression qui s'évalue à un tel callable. Les fonctions avec plus d'un paramètre obligatoire ne sont pas autorisées et échoueront comme si la fonction était appelée normalement avec des arguments insuffisants. Les fonctions qui prennent une variable par référence ne sont pas autorisées. Si la partie droite ne s'évalue pas à une fonction valide, une erreur sera générée.
Note:
Sachez que, pour éviter toute ambiguïté syntaxique, les fonctions fléchées DOIVENT être placées entre parenthèses lorsqu'elle sont utilisées avec un opérateur de pipeline, comme dans les exemples ci-dessus. Ne pas le faire entraînera une erreur fatale.