Funkcje zwrotne (callback) w PHP

Funkcją zwrotną (callback) nazywa się funkcja, która jest przekazywana jako parametr do innej funkcji.

Spójrzmy na przykład. Załóżmy, że mamy funkcję, która jako pierwszy parametr przyjmuje liczbę, a jako drugi parametr - funkcję zwrotną (callback):

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

Zróbmy tak, aby wewnątrz funkcji nasza funkcja zwrotna została wywołana dla przekazanej liczby:

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

Zobaczmy teraz, jakie są warianty przekazania funkcji zwrotnej do naszej funkcji.

Wariant 1

Nasza funkcja zwrotna może być zwykłą funkcją:

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

W tym przypadku jako funkcję zwrotną przekażemy nazwę naszej funkcji:

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

Wewnątrz funkcji func nasza funkcja zwrotna zostanie wywołana po nazwie.

Wariant 2

Nasza funkcja zwrotna może być funkcją anonimową, zapisaną w zmiennej:

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

W tym przypadku jako parametr przekazujemy zmienną z naszą funkcją:

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

Wariant 3

Można przekazać funkcję anonimową od razu jako parametr:

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

Wariant 4

Można skrócić kod, używając funkcji strzałkowej:

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

Zadania praktyczne

Задание 1

Dana jest funkcja, która jako parametr przyjmuje tablicę i funkcję zwrotną (callback), która zostanie zastosowana do każdego elementu tablicy:

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

Wywołaj tę funkcję, przekazując jako parametr tablicę z liczbami oraz funkcję zwrotną, która podnosi przekazaną liczbę do kwadratu.