Les fonctions anonymes (fermetures) peuvent être créées en tant que fonctions locales (ne pollluant donc pas l'espace global, comme l'a suggéré Dathan).
Avec le mot-clé "use", les variables transmises ou créées par la fonction englobante peuvent être utilisées à l'intérieur de la fermeture. Ceci est très utile dans les fonctions de rappel qui sont limitées dans leur liste de paramètres. Les variables "use" peuvent être définies en dehors de la fermeture, ce qui évite de devoir les redéfinir à chaque fois que la fermeture est appelée.
function change_array($arr, $pdo)
{
$keys = array('a', 'c');
$anon_func = function(& $val, $key) use ($keys, $pdo)
{
if (in_array($key, $keys) {
$pdo->query('some query using $key');
$val = $pdo->fetch();
}
}
arr_walk($arr, $anon_func);
return $arr;
}
$pdo = new($dsn, $uname, $pword);
$sample = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4);
$sample = change_array($sample, $pdo);
(Bien sûr, cet exemple peut être plus simple sans fermeture, mais c'est juste pour la démonstration).