diff --git a/language/operators/functional.xml b/language/operators/functional.xml new file mode 100644 index 0000000000..8c6b5f643a --- /dev/null +++ b/language/operators/functional.xml @@ -0,0 +1,119 @@ + + + + + Opérateurs fonctionnels + Fonctionnels + + 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. + + En utilisant <literal>|></literal> + + strlen(...); +echo $result, PHP_EOL; + +$result = strlen("Hello World"); +echo $result, PHP_EOL; +?> +]]> + + &example.outputs; + + + + + + + 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 : + + Enchaînement d'appels |> + + 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; +?> +]]> + + &example.outputs; + + 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. + + + + 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. + + + + + &reftitle.seealso; + + + Closure + + + +