Fonctions de rappel en PHP

Une fonction de rappel est une fonction qui est passée en paramètre à une autre fonction.

Regardons un exemple. Supposons que nous ayons une fonction qui prend un nombre en premier paramètre, et une fonction de rappel en deuxième paramètre :

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

Faisons en sorte qu'à l'intérieur de la fonction notre fonction de rappel soit appelée pour le nombre transmis :

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

Voyons maintenant quelles sont les options pour passer une fonction de rappel à notre fonction.

Option 1

Notre fonction de rappel peut être une fonction ordinaire :

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

Dans ce cas, en tant que fonction de rappel nous transmettrons le nom de notre fonction :

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

À l'intérieur de la fonction func notre fonction de rappel sera appelée par son nom.

Option 2

Notre fonction de rappel peut être une fonction anonyme, enregistrée dans une variable :

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

Dans ce cas, nous passons en paramètre la variable contenant notre fonction :

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

Option 3

On peut passer la fonction anonyme directement en paramètre :

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

Option 4

On peut raccourcir le code en utilisant une fonction fléchée :

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

Problèmes pratiques

Задание 1

Une fonction est donnée, prenant en paramètre un tableau et une fonction de rappel, qui sera appliquée à chaque élément du tableau :

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

Appelez cette fonction, en passant en paramètre un tableau de nombres et une fonction de rappel élevant le nombre transmis au carré.