2012-01-31 19 views
5

Olası Çoğalt:
Immediately executing anonymous functionsAnonim bir işlevi anında değerlendirebilir miyim?

ben hemen o yöntem args bir Kapatma nesne olmaktan çok bir anonim işlevini değerlendirmek istediğiniz

. Mümkün mü? Örneğin

:

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

3 çizgidir yasadışı sözdizimi - Bunu yapmanın bir yolu var mı? Eğer sadece bir değişkene atamayı ve sonradan değişkeni çağırmak ne zaman o biraz saçma olabilir ama

Teşekkür

+0

Bunu neden yapmanız gerektiğini hayal etmek zor mu? Neden sadece işlevin sonucunu bir değişkene atamaz ve sonra bu değişkeni yerine geçirir? –

+0

Ayrıca bu örneklerde fonksiyonunuz neredeyse sadece anonim bir işlevdir, kapanışın özellikleri yoktur, mevcut bağlamından herhangi bir değişken 'hatırlamıyor' –

+1

Gerçekten neden ihtiyacım olduğunu açıklamak istemedim Bunu yapmak için - belli ki sıra dışı bir durum. – Tom

cevap

2

Sen ... call_user_func ile yapabiliriz.

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

Onunla PHP 5.4 yetenekleri dereferencing oluyor bu mümkün kılacak düşünebilir. Yine de yanılıyorsunuz (yine de RC6'dan itibaren).

+0

Neden bunu aptalca değerlendiriyorsunuz? – Tadeck

+0

@Tadeck Bana öyle geliyor ki, '$ f = function() {echo' 1 '; }; $ f(); '' call_user_func' işlevini kullanmanın teknik açıdan huzursuz bir tarafı olmasa da, açık sözlü ifadeyi daha okunabilir buluyorum. Yine de, call_user_func ile tek bir satırın kısallığında temyizi görebilirim. – rdlowrey

İlgili konular