Callback-funktsioonid PHP-s

Callback on funktsioon, mis edastatakse parameetrina teise funktsiooni.

Vaatame näidet. Oletame, et meil on funktsioon, mis võtab esimese parameetrina arvu ja teise parameetrina - callbacki:

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

Teeme nii, et funktsiooni sees kutsutaks meie callback etteantud arvu jaoks välja:

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

Vaatame nüüd, millised võimalused callbacki edastamiseks meie funktsiooni on.

Variant 1

Meie callback võib olla tavaline funktsioon:

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

Sel juhul edastame callbackina meie funktsiooni nime:

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

Funktsiooni func sees kutsutakse meie callback välja nime järgi.

Variant 2

Meie callback võib olla anonüümne funktsioon, kirjutatud muutujasse:

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

Sel juhul edastame parameetrina muutuja meie funktsiooniga:

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

Variant 3

Võib edastada anonüümse funktsiooni kohe parameetrina:

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

Variant 4

Saab lühendada koodi, kasutades noolfunktsiooni:

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

Praktilised ülesanded

Задание 1

Antud funktsioon, mis võtab parameetrina massiivi ja callbacki, mida rakendatakse iga massiivi elemendi jaoks:

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

Kutsu see funktsioon välja, edastades parameetritena numbritega massiivi ja callbacki, mis tõstab etteantud numbri ruutu.