2012-01-12 9 views
7

Powiel możliwe:
Calling closure assigned to object property directlyPHP dołączona do stdObject i przykuty

Jeśli mam klasy jak poniżej:

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

Więc moje pytanie brzmi, kiedy Wywołuję funkcję dwa z funkcji one, funkcja two zwraca zmienną $ test, która ma funkcję zamknięcia funkcji func() do niej dołączonej. Dlaczego nie mogę tego nazwać łańcuszkową metodą?

Edit Właśnie sobie przypomniałem, że można to również zrobić za pomocą $ this-> func -> __ powołać() dla każdego, kto tego potrzebuje.

Odpowiedz

6

Ponieważ jest to obecnie ograniczenie PHP. To, co robisz, jest logiczne i powinno być możliwe. W rzeczywistości, można obejść ograniczenia pisząc:

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

lub

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

Głupie, wiem.

+0

Heh, interesujące. Dzięki za pomoc. –

Powiązane problemy