Функции-коллбэки в PHP

Коллбэком называется функция, которая передается параметром в другую функцию.

Давайте посмотрим на примере. Пусть у нас есть функция, которая первым параметром принимает число, а вторым параметром - коллбэк:

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;
  }
?>

Вызовите эту функцию, в качестве параметра передав массив с числами и коллбэк, возводящий переданное число в квадрат.