2012-01-31 22 views
5

thể trùng lặp:
Immediately executing anonymous functionsTôi có thể đánh giá ngay một chức năng ẩn danh không?

tôi muốn đánh giá ngay lập tức một chức năng ẩn danh chứ không phải là nó xuất hiện như một đối tượng đóng cửa trong args phương pháp. Điều này có thể không?

Ví dụ:

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

Dòng thứ 3 là cú pháp bất hợp pháp - là có cách nào để làm điều này?

Cảm ơn

+0

Thật khó để tưởng tượng lý do tại sao bạn cần thực hiện việc này? Tại sao không chỉ gán kết quả của hàm cho một biến và sau đó chuyển biến đó thay vào đó? –

+0

Cũng trong những ví dụ này chức năng của bạn là khá nhiều chức năng vô danh, không có đặc điểm đóng cửa, nó không phải 'nhớ' bất kỳ biến nào từ ngữ cảnh hiện tại của nó –

+1

Tôi nhận ra rằng, tôi thực sự không muốn giải thích tại sao tôi cần để làm điều này - rõ ràng đó là một tình huống bất thường. – Tom

Trả lời

2

Bạn có thể làm điều đó với call_user_func ... dù rằng thể là một chút ngớ ngẩn khi bạn chỉ có thể gán nó vào một biến và sau đó gọi biến.

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

Bạn có thể nghĩ rằng PHP 5.4 với nó dereferencing khả năng sẽ làm cho khả năng. Bạn sẽ sai, tuy nhiên (như của RC6, anyway).

+0

Tại sao bạn xem nó ngớ ngẩn? – Tadeck

+0

@Tadeck Vâng, có vẻ như với tôi nó không có ý nghĩa để thực hiện một cuộc gọi chức năng bổ sung để 'call_user_func' khi bạn chỉ có thể dễ dàng làm' $ f = function() {echo '1'; }; $ f(); 'Mặc dù không có gì kỹ thuật không rõ ràng về việc sử dụng' call_user_func' trong trường hợp này, tôi tìm thấy lời gọi rõ ràng dễ đọc hơn. Tôi có thể thấy sự hấp dẫn trong ngắn gọn của một dòng duy nhất với 'call_user_func', mặc dù. – rdlowrey

Các vấn đề liên quan