Hàm callback trong PHP
Callback là một hàm được truyền vào như một tham số cho một hàm khác.
Hãy xem một ví dụ. Giả sử chúng ta có một hàm chấp nhận một số làm tham số đầu tiên, và một callback làm tham số thứ hai:
<?php
function func($num, $calb)
{
}
?>
Hãy làm sao để bên trong hàm callback của chúng ta được gọi với số đã truyền:
<?php
function func($num, $calb)
{
echo $calb($num);
}
?>
Bây giờ hãy xem có những phương án nào để truyền callback vào hàm của chúng ta.
Phương án 1
Callback của chúng ta có thể là một hàm thông thường:
<?php
function calb($num) {
return $num ** 2;
}
?>
Trong trường hợp này, với tư cách là callback chúng ta sẽ truyền tên của hàm mình:
<?php
func(3, 'calb');
?>
Bên trong hàm func callback của chúng ta
sẽ được gọi theo tên.
Phương án 2
Callback của chúng ta có thể là một hàm ẩn danh, được lưu vào một biến:
<?php
$calb = function($num) {
return $num ** 2;
};
?>
Trong trường hợp này, chúng ta truyền vào tham số là biến chứa hàm của chúng ta:
<?php
func(3, $calb);
?>
Phương án 3
Có thể truyền hàm ẩn danh trực tiếp làm tham số:
<?php
func(3, function($num) {
return $num ** 2;
});
?>
Phương án 4
Có thể rút ngắn mã bằng cách sử dụng hàm mũi tên:
<?php
func(3, fn($num) => $num ** 2);
?>
Bài tập thực hành
Cho một hàm, chấp nhận một mảng làm tham số và một callback, sẽ được áp dụng cho từng phần tử của mảng:
<?php
function func($arr, $calb)
{
$res = [];
foreach ($arr as $elem) {
$res[] = $calb($elem);
}
return $res;
}
?>
Gọi hàm này, truyền vào tham số là mảng chứa các số và callback bình phương số đã truyền.