From 98b77112e8a4dadfc4e65ad71bbcb51224a6ada2 Mon Sep 17 00:00:00 2001 From: Leonardo Lara Rodrigues Date: Mon, 6 Oct 2025 16:24:46 -0300 Subject: [PATCH] sync with en rev --- language/operators.xml | 3 +- language/operators/functional.xml | 116 ++++++++++++++++++++++++++++++ 2 files changed, 118 insertions(+), 1 deletion(-) create mode 100644 language/operators/functional.xml diff --git a/language/operators.xml b/language/operators.xml index ba7f734f2..67eedfdc7 100644 --- a/language/operators.xml +++ b/language/operators.xml @@ -1,5 +1,5 @@ - + Operadores @@ -42,6 +42,7 @@ &language.operators.string; &language.operators.array; &language.operators.type; + &language.operators.functional; + + Operadores Funcionais + Funcional + + O PHP 8.5 e versões posteriores suportam um operador que funciona diretamente em chamáveis. O operador |>, + ou "pipe", aceita um chamável de parâmetro único à direita e passa + o valor do lado esquerdo para ele, avaliando o resultado do chamável. O chamável + à direita pode ser qualquer chamável PHP válido: um Closure, + um chamável de primeira classe, + um objeto que implementa __invoke(), etc. + + + Isso significa que as duas linhas seguintes são logicamente equivalentes. + + Usando <literal>|></literal> + + strlen(...); +print $result . PHP_EOL; + +$result = strlen("Hello World"); +print $result . PHP_EOL; +?> +]]> + + &example.outputs; + + + + + + + Para uma única chamada, isso não é muito útil. Torna-se útil quando várias chamadas são encadeadas. + Ou seja, os dois fragmentos de código a seguir são logicamente equivalentes: + + Encadeando chamadas com |> + + htmlentities(...) + |> str_split(...) + |> (fn($x) => array_map(strtoupper(...), $x)) + |> (fn($x) => array_filter($x, fn($v) => $v != 'O')) +; +print $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; +print $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 +) +]]> + + + + + O lado esquerdo do pipe pode ser qualquer valor ou expressão. O lado direito + pode ser qualquer chamável PHP válido que receba um único parâmetro, ou qualquer expressão + que seja avaliado como tal chamável. Funções com mais de um parâmetro obrigatório + não são permitidas e falharão como se fossem chamadas normalmente + com argumentos insuficientes. Funções que recebem uma variável por referência não são permitidas. + Se o lado direito não for avaliado como um chamável válido, será gerado um erro. + + + + Esteja ciente de que, para evitar ambiguidade de sintaxe, funções de seta + PRECISAM ser colocadas entre parênteses quando usadas com um operador de pipe, como nos exemplos acima. + Caso contrário, ocorrerá um erro fatal. + + + + + &reftitle.seealso; + + + Closure + + + +