Hàm không tên

Variable functions

Variable functions là tính chất của PHP để chuyển string thành tên hàm và thực thi nó. Điều kiện là nội dung của string không phải các cấu trúc ngôn ngữ của PHP như echo, print, unset(), isset(), empty(), includerequire.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
<?php
function foo() {
  echo "Thực thi hàm foo()\n";
}
$a = 'foo';

// tương đương với foo();
($a)();
// tương đương với foo();
$a();

Hàm không tên (Anonymous functions)

Anonymous functions hay closures là hàm nhưng không có tên. Thường được sử dụng như tham số của hàm khác hoặc được gán vào biến.

Anonymous functions là tham số của hàm khác.

1
2
3
4
5
6
<?php
$array = ["d" => "lemon", "a" => "orange", "b" => "banana"];

array_walk($array, function ($item, $key) {
  echo "$key: $item\n";
});

Anonymous functions được gán vào biến.

1
2
3
4
5
6
7
8
<?php
// biến $greet được gán với anonymos function
$greet = function($name) {
  printf("Xin chào %s\r\n", $name);
};

$greet('thế giới'); // -> Xin chào thế giới
$greet('PHP'); // -> Xin chào PHP

Anonymous functions được gán vào biến và sử dụng biến bên ngoài hàm với từ khóa use.

1
2
3
4
5
6
7
8
<?php
$hello = 'Xin chào';
$greet = function($name) use ($hello) {
  printf("$hello %s\r\n", $name);
};

$greet('thế giới'); // -> Xin chào thế giới
$greet('PHP'); // -> Xin chào PHP