2011-06-13 25 views
9

¿Hay alguna manera de pasar el contexto del objeto a una función anónima sin pasando $this como argumento?¿Cómo pasar el contexto del objeto a una función anónima?

class Foo { 
    function bar() { 
     $this->baz = 2; 
     # Fatal error: Using $this when not in object context 
     $echo_baz = function() { echo $this->baz; }; 
     $echo_baz(); 
    } 
} 
$f = new Foo(); 
$f->bar(); 

Respuesta

10

Puede asignar $this a alguna variable y luego usar use palabra clave para pasar esta variable para funcionar, al definir la función, aunque no estoy seguro de si es más fácil de usar. De todos modos, aquí está un ejemplo:

class Foo { 
    function bar() { 
     $this->baz = 2; 
     $obj = $this; 
     $echo_baz = function() use($obj) { echo $obj->baz; }; 
     $echo_baz(); 
    } 
} 
$f = new Foo(); 
$f->bar(); 

Vale la pena señalar que $obj se verá como objeto estándar (en lugar de como $this), por lo que no será capaz de acceder a los miembros privados y protegidos.

+4

Nota: PHP v5.4 ahora permite el uso de '$ this' dentro de funciones anónimas. – lifo

Cuestiones relacionadas