Các biến PHP trong các hàm ẩn danh


119

Tôi đã thử với các hàm ẩn danh trong PHP và nhận ra rằng chúng dường như không tiếp cận các biến bên ngoài chúng. Có cách nào để giải quyết vấn đề này không?

Thí dụ:

$variable = "nothing";

functionName($someArgument, function() {
  $variable = "something";
});

echo $variable;  //output: "nothing"

Điều này sẽ xuất ra "không có gì". Có cách nào mà chức năng ẩn danh có thể truy cập $variablekhông?

Câu trả lời:


277

Có, sử dụng cách đóng :

functionName($someArgument, function() use(&$variable) {
  $variable = "something";
});

Lưu ý rằng để bạn có thể sửa đổi $variablevà truy xuất giá trị đã sửa đổi bên ngoài phạm vi của hàm ẩn danh, nó phải được tham chiếu trong việc sử dụng hàm đóng &.


Nó mới! Đây là cú pháp mới trong PHP 5.3.
Rocket Hazmat

1
@Rocket Vì vậy, công bằng mà nói, cú pháp của hàm ẩn danh thực sự (trái ngược với create_function()) và usetừ khóa được ghi lại (không tốt) trên cùng một trang tài liệu mô tả chúng.
DaveRandom

4
Lưu ý nhanh chóng đối với những người có thể không biết: Bạn có thể thả &khi đi qua một đối tượng, kể từ khi họ luôn thông qua tham khảo ... và đừng quên kiểu gợi ý của bạn :) Ví dụ:function() use (PDO $pdo) {
keyboardSmasher

@Alliswell Không, nó chỉ dành cho các đối tượng, nếu không, bạn cần chuyển bằng tham chiếu để sửa đổi biến. Hãy xem ví dụ này .
nickb
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.