Variables PHP en funciones anónimas

119

Estaba jugando con funciones anónimas en PHP y me di cuenta de que no parecen alcanzar variables fuera de ellas. ¿Hay alguna forma de solucionar este problema?

Ejemplo:

$variable = "nothing";

functionName($someArgument, function() {
  $variable = "something";
});

echo $variable;  //output: "nothing"

Esto generará "nada". ¿Hay alguna forma de que la función anónima pueda acceder al $variable?

einord
fuente

Respuestas:

277

Sí, use un cierre :

functionName($someArgument, function() use(&$variable) {
  $variable = "something";
});

Tenga en cuenta que para que pueda modificar $variabley recuperar el valor modificado fuera del alcance de la función anónima, se debe hacer referencia a él en el cierre mediante &.

nickb
fuente
¡Es nuevo! Su sintaxis es nueva en PHP 5.3.
Rocket Hazmat
1
@Rocket Entonces, para ser justos, es la verdadera sintaxis de función anónima (a diferencia de create_function()) y la usepalabra clave está documentada (mal) en la misma página de documentos que las describe.
DaveRandom
4
Nota rápida para aquellos que quizás no lo sepan: puede soltar el &al pasar un objeto, ya que siempre se pasan por referencia ... y no olvide su sugerencia de tipo :) Por ejemplo:function() use (PDO $pdo) {
keyboardSmasher
@Alliswell No, es solo para objetos, de lo contrario, debe pasar por referencia para modificar la variable. Vea este ejemplo .
nickb