Các chức năng gọi lại trong PHP
Chức năng gọi lại
Một hàm gọi lại (thường được gọi là "gọi lại") là một hàm được truyền như một đối số vào một hàm khác.
Bất kỳ hàm hiện có nào cũng có thể được sử dụng như một hàm gọi lại. Để sử dụng một hàm làm hàm gọi lại, hãy chuyển một chuỗi chứa tên của hàm làm đối số của một hàm khác:
Thí dụ
Chuyển một lệnh gọi lại đến hàm của PHP array_map()
để tính độ dài của mọi chuỗi trong một mảng:
<?php
function my_callback($item) {
return strlen($item);
}
$strings = ["apple", "orange",
"banana", "coconut"];
$lengths =
array_map("my_callback", $strings);
print_r($lengths);
?>
Bắt đầu từ phiên bản 7, PHP có thể chuyển các hàm ẩn danh làm hàm gọi lại:
Thí dụ
Sử dụng một hàm ẩn danh làm lệnh gọi lại cho hàm của PHP array_map()
:
<?php
$strings = ["apple", "orange", "banana", "coconut"];
$lengths =
array_map( function($item) { return strlen($item); } , $strings);
print_r($lengths);
?>
Gọi lại trong các chức năng do người dùng xác định
Các hàm và phương thức do người dùng định nghĩa cũng có thể lấy các hàm gọi lại làm đối số. Để sử dụng các hàm gọi lại bên trong một hàm hoặc phương thức do người dùng xác định, hãy gọi hàm hoặc phương thức đó bằng cách thêm dấu ngoặc đơn vào biến và truyền các đối số như với các hàm bình thường:
Thí dụ
Chạy một lệnh gọi lại từ một hàm do người dùng xác định:
<?php
function exclaim($str) {
return $str . "! ";
}
function ask($str) {
return $str . "? ";
}
function
printFormatted($str, $format) {
// Calling the $format callback
function
echo $format($str);
}
// Pass "exclaim" and "ask" as callback
functions to printFormatted()
printFormatted("Hello world", "exclaim");
printFormatted("Hello world", "ask");
?>