Closure trong PHP là gì?
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ị.
Cú pháp cơ bản của Closure
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.
Ví dụ:
$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.
Sử dụng use
trong Closure
Closure 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
.
Cách sử dụng 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.
Ứng dụng của Closure trong PHP
Closure trong Callback với 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.
Ví dụ:
$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 bên trong Lớp (Class)
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.
Ví dụ:
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
.
Kết luận
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.