Giới thiệu
Anonymous function là function không có tên do người dùng định nghĩa. Còn gọi là closure hoặc lambda function. Đôi khi cần function chỉ dùng một lần. Closure là anonymous function "đóng gói" môi trường nơi nó được định nghĩa. Cần từ khóa use. Ứng dụng phổ biến nhất là tạo inline callback function.
Cú pháp
$var = function ($arg1, $arg2) { return $val; };
- Không có tên function giữa
functionvà ngoặc mở. - Có dấu chấm phẩy sau định nghĩa vì anonymous function definitions là expressions.
- Function gán cho biến, gọi sau bằng tên biến.
- Khi truyền cho function khác gọi sau, gọi là callback.
- Trả về từ outer function để truy cập biến của outer function - gọi là closure.
Ví dụ
Anonymous function cơ bản
<?php
$var = function ($x) { return pow($x, 3); };
echo "cube of 3 = " . $var(3);
?>
Kết quả
cube of 3 = 27
Anonymous function làm callback
Dùng anonymous function làm argument cho built-in usort(). Hàm usort() sắp xếp mảng dùng function so sánh:
<?php
$arr = [10, 3, 70, 21, 54];
usort($arr, function ($x, $y) {
return $x > $y;
});
foreach ($arr as $x) {
echo $x . "\n";
}
?>
Kết quả
3 10 21 54 70
Anonymous function làm closure
Closure là anonymous function truy cập biến ngoài scope nhờ từ khóa use:
<?php
$maxmarks = 300;
$percent = function ($marks) use ($maxmarks) {
return $marks * 100 / $maxmarks;
};
echo "marks=285 percentage=" . $percent(285);
?>
Kết quả
marks=285 percentage=95