Callback-funktioner i PHP

En callback är en funktion, som skickas som en parameter till en annan funktion.

Låt oss titta på ett exempel. Antag att vi har en funktion som tar ett nummer som sin första parameter, och en callback som sin andra parameter:

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

Låt oss göra så att inuti funktionen vår callback anropas med det skickade numret:

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

Låt oss nu se vilka alternativ som finns för att skicka en callback till vår funktion.

Alternativ 1

Vår callback kan vara en vanlig funktion:

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

I det här fallet skickar vi namnet på vår funktion som callback:

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

Inuti funktionen func kommer vår callback att anropas med dess namn.

Alternativ 2

Vår callback kan vara en anonym funktion, som lagras i en variabel:

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

I det här fallet skickar vi variabeln som innehåller vår funktion som en parameter:

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

Alternativ 3

Man kan skicka den anonyma funktionen direct som en parameter:

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

Alternativ 4

Man kan förenkla koden genom att använda en pilfunktion:

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

Praktiska uppgifter

Задание 1

Given en funktion som tar en array och en callback som parameter, och som applicerar callbacken på varje element i arrayen:

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

Anropa denna funktion genom att skicka en array med nummer och en callback som parameter, som kvadrerar det skickade numret.