2012-01-12 11 views
7

Eventuali duplicati:
Calling closure assigned to object property directlyPHP allegata alla stdObject e incatenato

Se ho una classe come questa:

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?' 

Quindi la mia domanda è, quando Chiaro la funzione due dalla funzione uno, la funzione due restituisce la variabile $ test che ha una funzione di chiusura di func() ad essa allegata. Perché non posso chiamarlo come metodo concatenato?

Edit ho appena ricordato che questo può anche essere fatto utilizzando $ this-> func -> __ richiamare() per chiunque che ha bisogno di questo.

risposta

6

Poiché al momento si tratta di una limitazione di PHP. Quello che stai facendo è logico e dovrebbe essere possibile. In realtà, è possibile aggirare la limitazione scrivendo:

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

o

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

stupido, lo so.

+0

Heh, interessante. Grazie per l'aiuto. –

Problemi correlati