Lambda và Closure trong PHP

 Chúng ta thường sử dụng lambdaclosure 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.

LambdaClosure
Kiểu dữ liệuobjectobject
instanceof of Closure
Truy cập biến ở phạm vi bên ngoàiKhôngcó, 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

Bài đăng phổ biến từ blog này

Lập trình hướng đối tượng, khó hiểu hay do mình không hiểu

Singleton design pattern

Generics trong PHP