Lambda và Closure trong PHP
Chúng ta thường sử dụng lambda và closure như là anonymous function trong callback nhưng lại chưa biết rõ 2 khái niệm khác nhau như thế nào. Vậy hãy cùng tìm hiểu nhé.
1. Lambda là gì?
Lambda (hay là Anonymous function) là một hàm không có tên, thường được khai báo gắn với 1 biến hoặc gán vào 1 hàm khác như một tham số. Các hàm này chỉ tồn tại trong phạm vi của biến mà nó được định nghĩa, vì vậy khi biến đó vượt ra ngoài phạm vi, thì hàm này cũng không còn nữa.
2. Closure là gì?
Một Closure về cơ bản giống như một Lambda, nhưng nó có thể truy cập các biến bên ngoài phạm vi mà nó được tạo ra.
3. Vậy hóa ra lambda với closure là một phải không?
Cũng gần đúng, điểm khác nhau thấy rõ nhất là closure có thể truy cập được biến từ bên ngoài thông qua use(...). Dưới đây là bảng so sánh của chúng.
Lambda | Closure | |
---|---|---|
Kiểu dữ liệu | object | object |
instanceof of Closure | Có | Có |
Truy cập biến ở phạm vi bên ngoài | Không | có, sử dụng use (...) |
Lưu ý: PHP sẽ tự chuyển các lambda, closure sang Closure object https://ninja-it.com/php/advanced/closure/.
Nhận xét
Đăng nhận xét