2013-03-03 25 views
10

Tôi đã nhìn thấy thực tế này trong các tài liệu php:Tại sao cửa hàng chức năng như biến trong PHP

$foo = function() { 
    echo 'foo'; 
} 

$foo(); 

Tại sao bạn sẽ làm điều đó thay vì chỉ:

function foo() 
{ 
    echo 'foo'; 
} 

foo(); 
+7

xem [Chức năng ẩn danh] (http://php.net/manual/en/functions.anonymous.php) – Federkun

+0

Bạn sẽ làm điều này để bạn có thể chuyển hàm đó từ đối tượng này sang đối tượng khác .. – Lix

+0

Đôi khi các chức năng ẩn danh rất hữu ích. Ví dụ bạn có một biểu mẫu và bạn cần xác nhận một số trường. Bạn chắc chắn, rằng bạn sẽ không cần chức năng này ở bất cứ nơi nào, nhưng ở đây và bạn cần phải vượt qua đối số có thể gọi được. Các chức năng ẩn danh của IMO là cách để đi trong tình huống như vậy. – Eugene

Trả lời

11

Họ hữu ích trong một vài cách. Cá nhân tôi sử dụng chúng bởi vì chúng dễ kiểm soát hơn các chức năng thực tế.

Nhưng cũng có thể, chức năng ẩn danh có thể làm điều này:

$someVar = "Hello, world!"; 
$show = function() use ($someVar) { 
    echo $someVar; 
} 
$show(); 

chức năng Anonymous có thể "nhập khẩu" biến từ phạm vi bên ngoài. Phần tốt nhất là nó an toàn để sử dụng trong các vòng lặp (không giống như JavaScript) bởi vì nó cần một bản sao của biến để sử dụng với hàm, trừ khi bạn yêu cầu nó thông qua tham chiếu với use (&$someVar)

+6

Một ví dụ về nó được sử dụng trong một vòng lặp có thể hữu ích. – MichaelRushton

+0

lệnh sử dụng, phao cứu sinh! – Oritm

+0

fyi - nếu bạn đang lướt qua để có câu trả lời hay nhất, tôi sẽ nói nhận xét được đánh giá cao ở trên bởi @Laxus cũng rất hữu ích (nếu không nhiều hơn) – cwd

2

Nó cũng thường được sử dụng để vượt qua callbacks với các chức năng như array_map và nhiều chức năng khác

0

Điều này cực kỳ hữu ích trong một số trường hợp cụ thể. Ví dụ:

Server::create('/') 
    ->addGetRoute('test', function(){ 
     return 'Yay!'; 
}) 

Đoạn mã trên là ví dụ về định tuyến đơn giản trong ứng dụng dựa trên REST.

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