Thời gian đọc: 2 phút
Closure trong PHP là một hàm ẩn danh (anonymous function), có thể giữ các biến từ phạm vi bên ngoài khi nó được định nghĩa. Nó thường được sử dụng để tạo ra các hàm linh hoạt, có thể dùng làm callback hoặc truyền vào các hàm khác như một giá trị.
Closure được tạo ra bằng cách sử dụng từ khóa function
mà không cần tên hàm.
$greet = function($name) {
return "Hello, " . $name;
};
echo $greet("Anh");
Trong ví dụ trên, biến $greet
là một closure và được gọi như một hàm thông thường.
use
trong ClosureClosure có thể “nắm giữ” các biến từ phạm vi bên ngoài của nó thông qua từ khóa use
.
use
$message = "Chào em";
$greet = function($name) use ($message) {
return $message . ", " . $name;
};
echo $greet("Anh");
Ở đây, biến $message
được nắm giữ từ bên ngoài closure và sử dụng trong hàm.
array_filter
Closure rất hữu ích khi sử dụng trong các hàm như array_filter
để lọc các phần tử của mảng.
$numbers = [1, 2, 3, 4, 5, 6];
$evenNumbers = array_filter($numbers, function($num) {
return $num % 2 === 0;
});
print_r($evenNumbers); // Kết quả: [2, 4, 6]
Closure có thể được sử dụng trong các lớp (class) để truy cập các thuộc tính của đối tượng.
class Greeting {
private $message = "Hello";
public function getGreeting() {
return function($name) {
return $this->message . ", " . $name;
};
}
}
$greet = (new Greeting())->getGreeting();
echo $greet("Em"); // Kết quả: Hello, Em
Trong ví dụ này, closure nắm giữ thuộc tính $message
của đối tượng lớp Greeting
.
Closure trong PHP mang lại sự linh hoạt và mạnh mẽ khi bạn cần tạo các hàm ẩn danh, callback, hoặc khi làm việc với các hàm bậc cao. Nó cho phép bạn giữ các biến từ phạm vi bên ngoài và sử dụng chúng trong hàm. Điều này giúp viết mã ngắn gọn hơn và tối ưu hơn trong nhiều trường hợp.