Corsi on-line
Chiudi
Newsletter:
  • Seguici su Facebook
  • Seguici su Twitter
  • Seguici su Google+
  • Seguici via RSS
  • Seguici col tuo Smartphone

Anonymous functions e Closures in PHP 5.3

Articolo scritto da Riccardo Brambilla
Pagina 1 di 2

A partire da PHP 5.3 sono disponibili le Anonymous functions (Lambda functions) e le Closures... ma di cosa si tratta?

Anonymous functions

Le funzioni anonime ( o lambda ) sono funzioni ( senza nome ) che hanno come utilizzo principale ( anche se non unico ) quello di essere definite come funzioni di callback.

Per chi di voi si chiedesse cos'è una funzione di callback potrei semplificare la definizione in questo modo: una funzione passata come argomento di un altra funzione.

(L'articolo continua più sotto...)

Forse è meglio vedere un esempio, per chiarezza vediamolo prima scritto in pseudocodice, le anonymous e i callback non sono infatti prerogativa di PHP:

// # Callback
function callback( parametro ) 
DO qualcosa con il parametro
return risultato elaborazione

// # Chiamante
function chiamante ( input, callback( parametro) )

Non è ancora chiaro vero? Nessun problema, vediamo un esempio pratico utilizzando la funzione di libreria array_walk la cui signature è:

bool array_walk ( array &$array , callback $funcname [, mixed $userdata ] )

Questa funzione applica ad ogni elemento dell'array $array la funzione di callback $funcname ( tralasciamo $userdata che è opzionale ).

Prima della versione 5.3 di PHP per utilizzarla avremmo dovuto scrivere ad esempio:

$array = array( "Rick", "Giorgio", "Matteo" );
function echoEach ( $item ) {
  echo $item . "<br />";
}

array_walk( $array, "echoEach" );

Vediamo come cambia con l'uso delle Lambda:

$array = array( "Rick", "Giorgio", "Matteo" );
array_walk( $array, function( $item ) {
  echo $item . "<br />";
});

Per entrambe le versioni l'output sarà:

Rick
Giorgio
Matteo

Altro esempio, la funzione array_filter, che accetta un array in input ed un callback, signature:

array array_filter ( array $input [, callback $callback ] )

Utilizziamo le funzioni anonime:

$arrayNum = array( 1, 3, 6, 5, 2, 8 );
$filtered = array_filter( $arrayNum, function( $item ){
  return $item > 2;
});

print_r( $filtered );

L'output:

Array
(
  [1] => 3
  [2] => 6
  [3] => 5
  [5] => 8
)

Ossia un array filtrato per i valori maggiori di 2.

Cosa guadagnamo? In leggibilità ed eleganza del codice.

Corsi
Corso LinuxCorso Linux
Guida completa al sistema open-source. A partire da 39 €.
Corso MySQLCorso MySQL
Gestione del database open-source. A partire da 49 €.
Corso PHPCorso PHP
Corso completo per la creazione di siti Web dinamici. A partire da 49 €.
Vedi anche...
Annunci

Mr.Webmaster

Pubblicità
Chi Siamo
Contattaci
Collabora
Note Legali
© 2003 - 2012 Mr.Webmaster - Il portale dei Webmaster Italiani - Tutti i diritti riservati | Powered by IKIweb Internet Media S.r.l. - PIVA 02848390122