diff --git a/language/operators/functional.xml b/language/operators/functional.xml new file mode 100644 index 0000000000..67db03bcfb --- /dev/null +++ b/language/operators/functional.xml @@ -0,0 +1,118 @@ + + + + + Opérateurs fonctionnels + Functional + + PHP 8.5 et les versions ultérieures prennent en charge un opérateur qui fonctionne directement sur les callables. L'opérateur + |>, ou "pipe," accepte un callable à paramètre unique à droite et lui passe + la valeur de gauche, évaluant le résultat du callable. Le callable + sur la droite doit être n'importe quel callable PHP valide : une Closure, + un callable de première classe, + un objet qui implémente __invoke() + + Cela signifie que les deux lignes suivantes sont logiquement équivalentes. + + Utilisation <literal>|></literal> + + strlen(...); +echo $result , PHP_EOL; + +$result = strlen("Hello World"); +echo $result , PHP_EOL; +?> +]]> + + &example.outputs; + + + + + + + Pour un appel unique ceci n'a pas beaucoup d'intérêt. Cela devient utile lorsque plusieurs appels sont enchaînés. + C'est-à-dire que 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 +) +]]> + + + + + Le coté gauche du pipe peut être n'importe quelle valeur ou expression. Le côté droit + peut être n'importe quel callable PHP valide qui prend un seul paramètre, ou n'importe quelle expression + qui évalue à un tel callable. Les fonctions avec plus d'un paramètre requis + 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 le côté droit n'évalue pas à un callable valide, cela générera une erreur. + + + + Soyez conscient que, pour éviter toute ambiguïté syntaxique, les fonctions fléchées + DOIVENT être entourées de parenthèses lorsqu'elles sont utilisées avec un opérateur pipe, comme dans les exemples ci-dessus. + Ne pas le faire entraînera une erreur fatale. + + + + + &reftitle.seealso; + + + Closure + + + +