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
$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
$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
$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
$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
$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
$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
$arr = [1, 2, 3, 4, 5];
$pow = 3;
$res = array_map(fn ($num) => $num ** $pow, $arr);
var_dump($res);
?>
Praktični zadaci
Dat je niz sa stringovima. Prevedite tekst svakog elementa niza u velika slova.
Dat je niz sa stringovima. Obrnite tekst svakog elementa niza tako da karakteri idu obrnutim redosledom.