Có thể gọi cho chúng mà không cần gán cho số nhận dạng giống như chúng tôi làm trong JavaScript? ví dụ.
Không có trong PHP 5.x; trừ khi bạn đếm nó khi phương thức của bạn nhận một cuộc gọi lại làm đối số. ví dụ:
$square = array_map(function ($v) { return $v*$v; }, $array);
là gì việc sử dụng đúng đắn về sử dụng xây dựng trong khi xác định vô danh chức năng
Từ khóa use
chỉ ra mà biến từ phạm vi từ vựng hiện tại nên được nhập khẩu vào việc đóng cửa. Bạn thậm chí có thể vượt qua chúng bằng cách tham khảo và thay đổi biến được thông qua, ví dụ:
$total = 0;
array_walk($array, function ($v) use (&$total) { $total += $v; });
// $total is now the sum of elements in $array
tình trạng của chức năng ẩn danh trong phương pháp công cộng với năng tiếp cận với tài sản riêng là gì?
đóng cửa được xác định bên trong một lớp có thể truy cập vào tất cả các thuộc tính và phương thức của nó, bao gồm cả những tin mà không cần phải nhập khẩu $this
thông qua từ khóa use
trong PHP 5.4:
// this works fine in PHP 5.4
$anon_func =
function($my_param) {
$thing = $my_param + $this->object_property;
echo('anonymous function');
};
Lưu ý rằng đối với một số lý do kỳ lạ hỗ trợ cho $this
trong đóng cửa was removed in PHP 5.3. Trong phiên bản này, bạn có thể làm việc xung quanh hạn chế này sử dụng một cái gì đó như:
// a workaround for PHP 5.3
$temp = $this;
$anon_func =
function($my_param) use ($temp) {
$thing = $my_param + $temp->object_property;
echo('anonymous function');
};
Nhưng điều này mang đến cho bạn truy cập vào chỉ các thành viên công cộng, cố gắng truy cập các thành viên tư nhân vẫn sẽ cung cấp cho bạn một lỗi.
Cũng lưu ý rằng cố gắng nhập $this
(qua use
), bất kể phiên bản PHP, sẽ dẫn đến lỗi nghiêm trọng Cannot use $this as lexical variable
.
Một đóng cửa là không hoàn toàn đồng nghĩa với một chức năng ẩn danh, mặc dù các hàm ẩn danh trong PHP là kiểu 'Closure'. Chỉ để bạn biết. – BoltClock
Lỗi chính xác khi bạn thử ví dụ mã thứ hai của mình là gì? 'sai' là một chút không xác định. – BoltClock
Không thể sử dụng $ this như biến lexical –