2013-09-04 29 views
5

Tôi nhìn vào ví dụ PHP của Closures trên http://us1.php.net/manual/en/functions.anonymous.phpPHP đóng cửa Phạm vi của các biến

Nó cung cấp mã ví dụ dưới đây và khẳng định:

đóng cửa cũng có thể kế thừa biến từ phạm vi phụ huynh. Mọi biến số như vậy phải được khai báo trong tiêu đề hàm. Thừa kế biến từ phạm vi gốc không giống như sử dụng biến số toàn cầu . Các biến toàn cục tồn tại trong phạm vi toàn cầu, là tương tự cho dù chức năng nào đang thực thi. Phạm vi cha mẹ của một đóng cửa là chức năng mà trong đó việc đóng cửa đã được khai báo (không phải nhất thiết phải là chức năng mà nó được gọi từ). Xem các ví dụ sau đây :

Tôi nhầm lẫn về cách hoạt động của tính năng này. $quantity$product biến dường như không cho tôi biết rằng chúng sẽ có sẵn bên trong hàm Đóng. Không phải Parent Scope là 1 phạm vi trong trường hợp này là hàm getTotal()?

enter image description here

+0

Dường như rất giống câu hỏi này: [Trong Php 5.3.0 Chức năng "Sử dụng" Mã định danh là gì? Lập trình viên sane có nên sử dụng nó không?] (Http://stackoverflow.com/questions/1065188/in-php-5-3-0-what-is-the-function-use-identifier-should-a-sane-programmer -us) –

+1

Tra cứu tài liệu về mảng đi bộ ... đây là nơi các thông số đó đang được đẩy vào hàm. – Orangepill

Trả lời

11

Bạn hiểu nhầm chữ ký chức năng. $quantity$product là các đối số thông thường sẽ được chuyển vào hàm khi được gọi, chúng thực sự không tồn tại trong phạm vi gốc và không có nghĩa là. use ($tax, &$total)đóng trên biến từ phạm vi gốc.

$foo = 'foo';    // closed over variable 
          // vvvv 
$func = function ($bar) use ($foo) { 
       // ^^^^ 
       // regular function argument 

    return $foo . $bar; 
}; 

echo $func('baz'); // "foobaz" 
0

Biến hai là câu hỏi được chuyển vào hàm gọi lại array_walk.

Tham số đầu tiên sẽ được chuyển làm giá trị của từng phần tử trong mảng, tham số thứ hai sẽ là khóa của mảng.

Các biến đóng trên các biến được tham chiếu trong mệnh đề use.

1

Đối số đóng $quantity$product không tồn tại trên mỗi định nghĩa hàm, chúng chỉ là phần giữ chỗ mảng_walk sẽ điền với giá trị thực trong quá trình thực thi. Đối số use là các biến bổ sung mà bạn nhập vào phạm vi của mảng cuộc gọi array nếu không sẽ không có sẵn cho hàm.