Le arrow Function

Le arrow function sono state introdotte in PHP 7.4 come sintassi più concisa per le funzioni anonime.

Sia le funzioni anonime che le arrow function sono implementate usando la classe Closure.

Le arrow function hanno la forma base fn (argument_list) => expr.

Le arrow function supportano le stesse funzionalità delle funzioni anonime, eccetto che l'uso delle variabili dallo scope padre è sempre automatico.

Quando una variabile usata nell'espressione è definita nello scope padre essa sarà implicitamente catturata per valore. Nel seguente esempio, le funzioni $fn1 e $fn2 si comportano allo stesso modo.

Example #1 Le arrow function catturano variabili per valore automaticamente

<?php

$y 
1;
 
$fn1 fn($x) => $x $y;
// equivalent all'utilizzo di $y per valore:
$fn2 = function ($x) use ($y) {
    return 
$x $y;
};

var_export($fn1(3));
?>

Il precedente esempio visualizzerà:

4

Questo funziona anche se le arrow function sono nidificate:

Example #2 Le arrow function catturano variabili per valore automaticamente, anche quando nidificate

<?php

$z 
1;
$fn fn($x) => fn($y) => $x $y $z;
// Produce 51
var_export($fn(5)(10));
?>

Analogamente alle funzioni anonime, la sintassi delle arrow function permette firme di funzioni arbitrarie, inclusi parametri e tipi di ritorno, valori di default, variadiche, così come passaggio di parametri e ritorno per riferimento. Tutti i seguenti sono esempi validi di arrow function:

Example #3 Esempi di arrow function

<?php

fn
(array $x) => $x;
static 
fn(): int => $x;
fn($x 42) => $x;
fn(&$x) => $x;
fn&($x) => $x;
fn($x, ...$rest) => $rest;

?>

Le arrow function usano il binding della variabili per valore. Questo è grossomodo equivalente ad eseguire uno use($x) per ogni variabile $x usata all'interno della arrow function. Un binding per valore significa che non è possibile modificare qualsiasi valore dallo scope esterno. Le funzioni anonime possono invece essere usate per il binding per riferimento.

Example #4 I valori dello scope esterno non possono essere modificati dalle arrow function

<?php

$x 
1;
$fn fn() => $x++; // Non ha effetto
$fn();
var_export($x);  // Produce 1

?>

Log delle modifiche

Versione Descrizione
7.4.0 Le arrow function sono diventate disponibili.

Note

Nota: È possibile usare func_num_args(), func_get_arg(), e func_get_args() dall'interno di una arrow function.

add a note add a note

User Contributed Notes

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