2012-01-31 18 views
5

Powiel możliwe:
Immediately executing anonymous functionsCzy mogę natychmiast ocenić anonimową funkcję?

Chcę natychmiast ocenić anonimową funkcję raczej niż występujący jako obiekt Zamknięcie w metodzie args. czy to możliwe?

Na przykład:

$obj = MyClass; 
$obj->Foo(function(){return "bar";}); // passes a Closure into Foo() 
$obj->Foo(function(){return "bar";}()); // passes the string "bar" into Foo()? 

The 3rd linia jest nielegalne składnia - czy jest jakiś sposób aby to zrobić?

Dzięki

+0

Trudno sobie wyobrazić, dlaczego musiałbyś to zrobić? Dlaczego nie wystarczy przypisać wynik funkcji do zmiennej, a następnie przekazać tę zmienną? –

+0

Również w tych przykładach czynność jest dość dużo tylko anonimowa funkcja nie posiada cech zamknięcia, to nie jest „pamiętanie” wszelkie zmienne z obecnym kontekście –

+1

Zdaję sobie sprawę, że tak naprawdę nie chciał wyjaśnić, dlaczego muszę Aby to zrobić - oczywiście jest to niezwykła sytuacja. – Tom

Odpowiedz

2

Można to zrobić z call_user_func ... mimo że może być trochę głupie, kiedy można po prostu przypisać ją do zmiennej, a następnie odwołać się do zmiennej.

call_user_func(function(){ echo "bar"; });

Można by pomyśleć, że PHP 5.4 z jego możliwości dereferencing byłoby to możliwe. Mylisz się jednak (tak czy inaczej RC6).

+0

Dlaczego uważasz to za głupie? – Tadeck

+0

@ Tadeck Cóż, wydaje mi się, że nie ma sensu wykonywać dodatkowego wywołania funkcji do 'call_user_func', kiedy równie łatwo można zrobić' $ f = function() {echo '1'; }; $ f(); 'Chociaż nie ma niczego technicznie nieuzasadnionego w używaniu' call_user_func' w tym przypadku, stwierdzam, że jawne wywołanie jest bardziej czytelne. Widzę jednak odwołanie w zwięzłości pojedynczej linii z 'call_user_func'. – rdlowrey

Powiązane problemy