PHPにおけるコールバック関数

コールバックとは、他の関数に パラメータとして渡される関数のことを指します。

例を見てみましょう。 ここに、最初のパラメータとして数値を受け取り、 2番目のパラメータとしてコールバックを受け取る関数があるとします:

php<?php
  function func($num, $calb)
  {
    
  }
?>

この関数内で、渡された数値に対して コールバックが呼び出されるようにしましょう:

php<?php
  function func($num, $calb)
  {
    echo $calb($num);
  }
?>

では、この関数にコールバックを渡す方法には どのようなものがあるか見ていきましょう。

方法 1

コールバックは通常の関数でも構いません:

php<?php
  function calb($num) {
    return $num ** 2;
  }
?>

この場合、コールバックとして関数名を渡します:

php<?php
  func(3, 'calb');
?>

関数 func の内部では、 このコールバックが名前によって呼び出されます。

方法 2

コールバックは、変数に代入された 無名関数でも構いません:

php<?php
  $calb = function($num) {
    return $num ** 2;
  };
?>

この場合、関数を代入した変数をパラメータとして渡します:

php<?php
  func(3, $calb);
?>

方法 3

無名関数を直接パラメータとして渡すこともできます:

php<?php
  func(3, function($num) {
    return $num ** 2;
  });
?>

方法 4

アロー関数を使うとコードを短縮できます:

php<?php
  func(3, fn($num) => $num ** 2);
?>

実践的な課題

Задание 1

配列と、配列の各要素に適用されるコールバックを パラメータとして受け取る関数があります:

php<?php
  function func($arr, $calb)
  {
    $res = [];
    
    foreach ($arr as $elem) {
      $res[] = $calb($elem);
    }
    
    return $res;
  }
?>

数値の配列と、渡された数値を二乗するコールバックを パラメータとして渡して、この関数を呼び出してください。