PHP 8.5 et versions ultérieures supportent un opérateur qui fonctionne directement
sur les callables. L'opérateur |>, ou « pipe », accepte
un callable à un seul paramètre à droite et lui transmet la valeur de gauche,
le résultat étant la valeur renvoyée par le callable. Le callable de
droite peut être n'importe quel callable PHP valide : une Closure,
un 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, cela 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'))
;
print_r($result);
$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;
print_r($result);
?>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 à un callable valide, une Error sera levée.
Note:
À noter que, pour éviter toute ambiguïté syntaxique, les fonctions fléchées DOIVENT être placées entre parenthèses lorsqu'elles sont utilisées avec un opérateur de pipeline, comme dans les exemples ci-dessus. Ne pas le faire entraînera une erreur fatale.