2013-04-06 37 views
5

Tôi không có vấn đề cụ thể, chỉ cần tìm hiểu sâu hơn về những gì đang diễn ra với Silex và với một số tính năng PHP mới. Này được dựa trên các mẫu mã trên trang "sử dụng" các tài liệu silex:Sự khác biệt giữa "sử dụng" và chuyển một tham số đến chức năng điều khiển

$blogPosts = array(
    1 => array(
     'date'  => '2011-03-29', 
     'author' => 'igorw', 
     'title'  => 'Using Silex', 
     'body'  => '...', ); 

$app->get('/blog/{id}', function (Silex\Application $app, $id) use ($blogPosts) { 
    //do stuff 
} 

Câu hỏi

  • sự khác biệt là gì đây giữa đi qua các $app$id như thông số với hàm và sử dụng -ing biến số $blogPosts?

  • Có thể $blogPosts cũng đã được chuyển thành thông số cho hàm này?

  • Ngoài ra, tôi thường thấy use ($app). Sự khác biệt giữa sử dụng -ing là gì $app và chuyển nó là thông số ?

Trả lời

7

Điều này không liên quan gì đến silex và mọi thứ liên quan đến "một số tính năng PHP mới-ish". Bạn đang tạo một hàm ẩn danh (còn được gọi là đóng), có thể sử dụng lại nhiều lần với các giá trị $app$id khác nhau, NHƯNG chỉ với cùng giá trị $blogPosts.

<?php 
$a = "a"; 
$b = "b"; 
$c = function ($d) use ($b) { 
    echo $d . "." . $b . PHP_EOL; 
}; 
$b = "c"; 
$e = function ($d) use ($b) { 
    echo $d . "." . $b . PHP_EOL; 
}; 

$c($a); // prints a.b, and not a.c 
$e($a); // prints a.c 

Ở đây, tôi đang tạo một hàm có $ b và được tạo, tôi sử dụng nó với các biến không được đặt tên giống như cách đối số của hàm được đặt tên.

+1

Vẫn cố gắng quấn quanh đầu tôi nhưng ví dụ của bạn chắc chắn hữu ích. Thật thú vị khi lưu ý rằng "sử dụng" sẽ tham chiếu giá trị $ b vì nó tồn tại tại thời điểm câu lệnh sử dụng được * khai báo *, không quan tâm khi hàm chứa câu lệnh "use" được * gọi là *. Vì vậy, "sử dụng" loại xác định một môi trường cho việc đóng cửa nó gắn liền với. Tôi giả định rằng nếu, dưới '$ b =" c ";', bạn đã đặt một hàm khác '$ e = function ($ f) sử dụng ($ b) {// cùng một công cụ};', sau đó gọi '$ e ($ a) 'sẽ in ra" ac " Tôi nhận được điều này? – patricksayshi

+0

Vâng, có vẻ như bạn (xem bản cập nhật của tôi) – greg0ire

+0

ví dụ tốt nhất bao giờ – user2907171

0

Việc sử dụng cho phép nhập các biến từ phạm vi gốc vào phạm vi kết thúc.

Nó sẽ cho phép hàm get() gọi đến kết thúc của bạn với param $ blogPosts thích hợp được nhập từ phạm vi gốc.

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