Povratni pozivi (callback) u ugrađenim funkcijama u PHP-u

PHP ima niz ugrađenih funkcija koje kao parametar prihvataju povratne pozive (callback). Opšti princip rada sa njima ćemo izučiti na primeru funkcije array_map. Ova funkcija kao prvi parametar prihvata povratni poziv (callback), a kao drugi - niz. Funkcija primenjuje povratni poziv na svaki element niza i vraća izmenjeni niz.

Hajde da pogledamo varijante korišćenja ove funkcije u skladu sa znanjima koja smo prethodno stekli.

Varijanta 1

Izdvojimo iz svakog elementa niza kvadratni koren pomoću ugrađene funkcije sqrt. Za ovo ćemo kao povratni poziv (callback) proslediti kao parametar string sa imenom ove funkcije:

php<?php
  $arr = [1, 2, 3, 4, 5];
  
  $res = array_map('sqrt', $arr);
  var_dump($res);
?>

Varijanta 2

Podignimo svaki element niza na kvadrat pomoću naše kreirane obične funkcije. Za ovo ćemo kao povratni poziv (callback) proslediti kao parametar string sa imenom te funkcije:

php<?php
  $arr = [1, 2, 3, 4, 5];
  
  function func($num) {
    return $num ** 2;
  }

  $res = array_map('func', $arr);
  var_dump($res);
?>

Varijanta 3

Prepišimo našu funkciju u anonimnu, zapisanu u promenljivoj:

php<?php
  $arr = [1, 2, 3, 4, 5];
  
  $func = function ($num) {
    return $num ** 2;
  };

  $res = array_map($func, $arr);
  var_dump($res);
?>

Varijanta 4

Prosledimo anonimnu funkciju kao parametar:

php<?php
  $arr = [1, 2, 3, 4, 5];
  
  $res = array_map(function ($num) {
    return $num ** 2;
  }, $arr);
  
  var_dump($res);
?>

Varijanta 5

Iskoristimo streličastu funkciju:

php<?php
  $arr = [1, 2, 3, 4, 5];
  
  $res = array_map(fn ($num) => $num ** 2, $arr);
  var_dump($res);
?>

Varijanta 6

Neka sada stepen, na koji treba podići broj, bude zadata spoljnom promenljivom povratnog poziva (callback). Iskoristimo ovu promenljivu, dobijajući pristup njoj preko use:

php<?php
  $arr = [1, 2, 3, 4, 5];
  $pow = 3;
  
  $res = array_map(function ($num) use ($pow) {
    return $num ** $pow;
  }, $arr);
  
  var_dump($res);
?>

Varijanta 7

Prepišimo prethodni kod preko streličaste funkcije. Sada će promenljiva $pow biti dostupna automatski:

php<?php
  $arr = [1, 2, 3, 4, 5];
  $pow = 3;
  
  $res = array_map(fn ($num) => $num ** $pow, $arr);
  var_dump($res);
?>

Praktični zadaci

Задание 1

Dat je niz sa stringovima. Prevedite tekst svakog elementa niza u velika slova.

Задание 2

Dat je niz sa stringovima. Obrnite tekst svakog elementa niza tako da karakteri idu obrnutim redosledom.