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<?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<?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<?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<?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<?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<?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<?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<?php
  func(3, fn($num) => $num ** 2);
?>

Bài tập thực hành

Задание 1

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<?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.