Operatori Funzionali

PHP 8.5, e versioni successive, supportano un operatore che lavora direttamente sui callable. L'operatore |>, o “pipe”, accetta un callable con singolo parametro a destra e gli passa il valore che si trova a sinistra, valutando infine il risultato del callable. Il callable a destra può essere un qualsiasi callable PHP valido: una Closure, un first-class callable, un oggetto che implementa __invoke(), ecc.

Questo significa che le seguenti righe sono equivalenti.

Example #1 Uso di |>

<?php
$result
= "Hello World" |> strlen(...);
echo
$result, PHP_EOL;

$result = strlen("Hello World");
echo
$result, PHP_EOL;
?>

Il precedente esempio visualizzerà:

11
11

Per una singola chiamata questo non è particolarmente utile. Diventa utile quando più chiamate sono concatenate insieme. Ciò significa che i seguenti frammenti di codice sono equivalenti dal punto di vista logico:

Example #2 Concatenare chiamate |>

<?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);
?>

Il precedente esempio visualizzerà:

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 parte sinistra del pipe può essere qualsiasi valore o espressione. La parte destra può essere qualsiasi callable PHP valido che accetti un singolo parametro, o qualsiasi espressione che valuti a un callable di questo tipo. Le funzioni con più di un parametro richiesto non sono consentite e falliranno come se la funzione fosse chiamata normalmente con argomenti insufficienti. Le funzioni che accettano una variabile per riferimento non sono consentite. Se la parte destra non valuta in un callable valido, genererà un Error.

Nota:

È importante notare che, per evitare ambiguità sintattiche, le arrow function DEVONO essere racchiuse tra parentesi quando vengono usate con un operatore pipe, come negli esempi precedenti. In caso contrario, si verificherà un errore fatale.

Vedere anche:

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top