Callback'ai įmontuotose PHP funkcijose
PHP yra keletas įmontuotų funkcijų,
kurios parametru priima callback'us.
Bendrą jų veikimo principą išmoksime
naudodami funkcijos array_map pavyzdį.
Ši funkcija pirmu parametru priima
callback'ą, o antru - masyvą. Funkcija taiko
callback'ą kiekvienam masyvo elementui
ir grąžina pakeistą masyvą.
Pažvelkime į šios funkcijos naudojimo variantus atsižvelgdami į anksčiau gautas žinias.
Variantas 1
Paimkime kiekvieno masyvo elemento
kvadratinę šaknį naudodami įmontuotą
funkciją
sqrt.
Tam kaip callback'ą parametru perduosime
eilutę su šios funkcijos pavadinimu:
<?php
$arr = [1, 2, 3, 4, 5];
$res = array_map('sqrt', $arr);
var_dump($res);
?>
Variantas 2
Pakelkime kiekvieną masyvo elementą kvadratu naudodami mūsų sukurtą įprastą funkciją. Tam kaip callback'ą parametru perduosime eilutę su šios funkcijos pavadinimu:
<?php
$arr = [1, 2, 3, 4, 5];
function func($num) {
return $num ** 2;
}
$res = array_map('func', $arr);
var_dump($res);
?>
Variantas 3
Paverskime mūsų funkciją anonime funkcija, įrašyta į kintamąjį:
<?php
$arr = [1, 2, 3, 4, 5];
$func = function ($num) {
return $num ** 2;
};
$res = array_map($func, $arr);
var_dump($res);
?>
Variantas 4
Perduokime anoniminę funkciją parametru:
<?php
$arr = [1, 2, 3, 4, 5];
$res = array_map(function ($num) {
return $num ** 2;
}, $arr);
var_dump($res);
?>
Variantas 5
Naudokime rodyklinę funkciją:
<?php
$arr = [1, 2, 3, 4, 5];
$res = array_map(fn ($num) => $num ** 2, $arr);
var_dump($res);
?>
Variantas 6
Tegul laipsnis, kuriuo reikia
pakelti skaičių, nurodomas išoriniu callback'o
kintamuoju. Panaudokime šį kintamąjį,
gautę prieigą prie jo per use:
<?php
$arr = [1, 2, 3, 4, 5];
$pow = 3;
$res = array_map(function ($num) use ($pow) {
return $num ** $pow;
}, $arr);
var_dump($res);
?>
Variantas 7
Perrašykime ankstesnį kodą naudodami rodyklinę
funkciją. Dabar kintamasis $pow
bus prieinamas automatiškai:
<?php
$arr = [1, 2, 3, 4, 5];
$pow = 3;
$res = array_map(fn ($num) => $num ** $pow, $arr);
var_dump($res);
?>
Praktinės užduotys
Duotas masyvas su eilutėmis. Paverskite kiekvieno elemento tekstą didžiosiomis raidėmis.
Duotas masyvas su eilutėmis. Apverskite kiekvieno elemento tekstą taip, kad simboliai eitų atvirkštine tvarka.