PHP atpakaļizsaukuma funkcijas

Atpakaļizsaukums ir funkcija, kas tiek nodota kā parametrs citai funkcijai.

Apskatīsim piemēru. Pieņemsim, ka mums ir funkcija, kas pirmais parametrs pieņem skaitli, bet otrais parametrs - atpakaļizsaukumu:

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

Izpildīsim tā, lai funkcijas iekšienē mūsu atpakaļizsaukums tiktu izsaukts ar nodoto skaitli:

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

Tagad apskatīsim, kādi ir varianti, kā nodot atpakaļizsaukumu mūsu funkcijā.

1. variants

Mūsu atpakaļizsaukums var būt parasta funkcija:

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

Šajā gadījumā kā atpakaļizsaukumu mēs nododam mūsu funkcijas nosaukumu:

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

Funkcijas func iekšienē mūsu atpakaļizsaukums tiks izsaukts pēc nosaukuma.

2. variants

Mūsu atpakaļizsaukums var būt anonīma funkcija, ierakstīta mainīgajā:

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

Šajā gadījumā mēs kā parametru nododam mainīgo ar mūsu funkciju:

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

3. variants

Var nodot anonīmo funkciju uzreiz kā parametru:

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

4. variants

Var saīsināt kodu, izmantojot arrow funkciju:

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

Praktiskie uzdevumi

Задание 1

Dota funkcija, kas parametru pieņem massīvu un atpakaļizsaukumu, kas tiks piemērots katram massīva elementam:

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

Izsauciet šo funkciju, kā parametru nododot massīvu ar skaitļiem un atpakaļizsaukumu, kas paceļ nodoto skaitli kvadrātā.