PHP admitirá cierres de forma nativa en 5.3. Un cierre es bueno cuando desea una función local que solo se use para algún propósito pequeño y específico. El RFC para cierres da un buen ejemplo:
function replace_spaces ($text) {
$replacement = function ($matches) {
return str_replace ($matches[1], ' ', ' ').' ';
};
return preg_replace_callback ('/( +) /', $replacement, $text);
}
Esto le permite definir la replacement
función localmente en el interior replace_spaces()
, de modo que no:
1) Aborde el espacio
de nombres global 2) Hace que las personas tres años después se pregunten por qué hay una función definida globalmente que solo se usa dentro de otra función
Mantiene las cosas organizadas. Observe cómo la función en sí no tiene nombre, simplemente se define y se asigna como una referencia a $replacement
.
Pero recuerde, debe esperar a PHP 5.3 :)
También puede acceder a variables fuera de su alcance en un cierre utilizando la palabra clave use
. Considere este ejemplo.
$multiplier = 3;
$numbers = array(1,2,3,4);
array_walk($numbers, function($number) use($multiplier){
echo $number * $multiplier;
});
Aquí se ofrece una excelente explicación ¿Qué son las lambdas y los cierres de php?