¿Es posible llamar a ellos sin asignar a identificador como hacemos en JavaScript? p.ej.
No en PHP 5.x; a menos que cuentes cuando tu método tome una devolución de llamada como argumento. por ejemplo:
$square = array_map(function ($v) { return $v*$v; }, $array);
¿Cuál es el uso correcto de uso construcción, mientras que la definición de función anónima
La palabra clave use
indica que variables del ámbito léxico actual deben ser importados en el cierre. Incluso puede pasarlos por referencia y cambiar la variable que se pasa, por ejemplo:
$total = 0;
array_walk($array, function ($v) use (&$total) { $total += $v; });
// $total is now the sum of elements in $array
lo que es el estado de la función anónima en método público con accesibilidad a la propiedad privada?
cierres definidas dentro de una clase tienen acceso completo a todas sus propiedades y métodos, incluyendo las privadas sin necesidad de importar $this
través de la palabra clave use
en PHP 5.4:
// this works fine in PHP 5.4
$anon_func =
function($my_param) {
$thing = $my_param + $this->object_property;
echo('anonymous function');
};
Tenga en cuenta que por alguna extraña razón soporte para $this
en los cierres was removed in PHP 5.3. En esta versión, se puede evitar esta restricción usando algo como:
// a workaround for PHP 5.3
$temp = $this;
$anon_func =
function($my_param) use ($temp) {
$thing = $my_param + $temp->object_property;
echo('anonymous function');
};
Pero esto le da acceso a sólo los miembros públicos, intentar acceder a miembros privados todavía le dará un error.
También tenga en cuenta que al intentar importar $this
(a través de use
), independientemente de la versión de PHP, se producirá un error fatal Cannot use $this as lexical variable
.
Un cierre no es totalmente sinónimo de una función anónima, aunque las funciones anónimas en PHP son de tipo 'Closure'. Solo para que sepas. – BoltClock
¿Cuál es el error exacto cuando prueba su segundo ejemplo de código? 'erróneo' es un poco inespecífico. – BoltClock
No se puede usar $ this como variable léxica –