2012-01-12 687 views
7

Duplicar posibles:
Calling closure assigned to object property directlyPHP anexa a stdObject y encadenado

Si tengo una clase como esta:

class test{ 
    function one(){ 
    $this->two()->func(); //Since $test is returned, why can I not call func()? 
    } 

    function two(){ 
    $test = (object) array(); 
    $test->func = function(){ 
     echo 'Does this work?'; 
    }; 
    return $test; 
    } 
} 

$new = new test; 
$new->one(); //Expecting 'Does this work?' 

Así que mi pregunta es, cuando Llamo a la función dos desde la función uno, la función dos devuelve la variable $ test que tiene una función de cierre de func() adjunta. ¿Por qué no puedo llamar eso como un método encadenado?

Editar simplemente recordé que esto también se puede hacer mediante el uso de $ this-> func -> __ invocar() para cualquier persona que necesita eso.

Respuesta

6

Porque esto es actualmente una limitación de PHP. Lo que estás haciendo es lógico y debería ser posible. De hecho, se puede evitar la limitación de la escritura:

function one(){ 
    call_user_func($this->two()->func); 
} 

o

function one(){ 
    $f = $this->two()->func; 
    $f(); 
} 

estúpido, lo sé.

+0

Heh, interesante. Gracias por la ayuda. –

Cuestiones relacionadas