$apples
sẽ đảm nhận giá trị được chuyển đến hàm khi hàm được gọi, ví dụ:
function my_method($callback) {
// inside the callback, $apples will have the value "foo"
$callback('foo');
}
$oranges
sẽ tham khảo các giá trị của biến $oranges
mà tồn tại trong phạm vi mà bạn đã xác định đóng cửa. Ví dụ .:
$oranges = 'bar';
my_method(function($apples) use ($oranges) {
// $oranges will be "bar"
// $apples will be "foo" (assuming the previous example)
});
Sự khác biệt là $oranges
bị ràng buộc khi chức năng là định nghĩa và $apples
bị ràng buộc khi chức năng là gọi.
Đóng cửa cho phép bạn truy cập các biến được xác định bên ngoài hàm, nhưng bạn phải cho PHP biết các biến nào có thể truy cập rõ ràng. Điều này tương tự (nhưng không tương đương!) Để sử dụng từ khóa global
nếu biến được định nghĩa trong phạm vi toàn cầu:
$oranges = 'bar';
my_method(function($apples) {
global $oranges;
// $oranges will be "bar"
// $apples will be "foo" (assuming the previous example)
});
Sự khác biệt giữa việc sử dụng đóng cửa và global
:
- Bạn có thể ràng buộc địa phương biến để đóng cửa,
global
chỉ hoạt động với các biến toàn cục.
Đóng cửa ràng buộc giá trị của biến tại thời điểm đóng cửa là được xác định. Thay đổi đối với các biến sau khi hàm được xác định không ảnh hưởng đến nó.
Mặt khác, nếu bạn sử dụng global
, bạn sẽ nhận được giá trị biến có tại thời điểm hàm này là được gọi là.
Ví dụ: [? Trong PHP 5.3.0, là những gì các chức năng "sử dụng" định danh]
$foo = 'bar';
$closure = function() use ($foo) {
echo $foo;
};
$global = function() {
global $foo;
echo $foo;
};
$foo = 42;
$closure(); // echos "bar"
$global(); // echos 42
Nguồn
2013-09-04 14:16:40
có thể trùng lặp của (http://stackoverflow.com/questions/1065188/in- php-5-3-0-what-is-the-function-use-identifier) – Trix