Funkcije-povratni pozivi u PHP-u

Povratni poziv (callback) se naziva funkcija, koja se prosleđuje kao parametar u drugu funkciju.

Hajde da pogledamo na primeru. Neka imamo funkciju koja prvi parametar prima broj, a drugi parametar - povratni poziv:

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

Učinimo da unutar funkcije naš povratni poziv bude pozvan za prosleđeni broj:

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

Hajde sada da pogledamo, koje ima varijanti prosleđivanja povratnog poziva u našu funkciju.

Varijanta 1

Naš povratni poziv može biti obična funkcija:

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

U ovom slučaju kao povratni poziv prosledićemo ime naše funkcije:

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

Unutar funkcije func naš povratni poziv će biti pozvan po imenu.

Varijanta 2

Naš povratni poziv može biti anonimna funkcija, upisana u promenljivu:

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

U ovom slučaju parametrom prosleđujemo promenljivu sa našom funkcijom:

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

Varijanta 3

Može se proslediti anonimna funkcija odmah parametrom:

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

Varijanta 4

Može se skratiti kod, koristeći streličastu funkciju:

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

Praktični zadaci

Задание 1

Data je funkcija, koja parametrima prima niz i povratni poziv, koji će se primeniti na svaki element niza:

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

Pozovite ovu funkciju, kao parametar prosleđujući niz sa brojevima i povratni poziv, koji podiže prosleđeni broj na kvadrat.