Callback-ek a PHP beépített függvényeiben
A PHP-ban számos beépített függvény létezik,
amelyek paraméterként callback-eket fogadnak.
Az általános működési elvüket az
array_map függvény példáján fogjuk tanulmányozni.
Ez a függvény az első paraméterként egy
callback-et, a második paraméterként pedig egy tömböt fogad.
A függvény a callback-et a tömb minden elemére alkalmazza
és visszaadja a módosított tömböt.
Nézzük meg ennek a függvénynek a használati lehetőségeit a korábban szerzett ismereteink figyelembevételével.
1. lehetőség
Vegyük ki a tömb minden elemének
a négyzetgyökét a beépített
sqrt
függvény segítségével.
Ehhez callback paraméterként a függvény nevét
tartalmazó sztringet adjuk át:
<?php
$arr = [1, 2, 3, 4, 5];
$res = array_map('sqrt', $arr);
var_dump($res);
?>
2. lehetőség
Emeljük négyzetre a tömb minden elemét egy általunk létrehozott közönséges függvény segítségével. Ehhez callback paraméterként a függvény nevét tartalmazó sztringet adjuk át:
<?php
$arr = [1, 2, 3, 4, 5];
function func($num) {
return $num ** 2;
}
$res = array_map('func', $arr);
var_dump($res);
?>
3. lehetőség
Alakítsuk át a függvényünket egy változóban tárolt névtelen függvénnyé:
<?php
$arr = [1, 2, 3, 4, 5];
$func = function ($num) {
return $num ** 2;
};
$res = array_map($func, $arr);
var_dump($res);
?>
4. lehetőség
Adjuk át a névtelen függvényt paraméterként:
<?php
$arr = [1, 2, 3, 4, 5];
$res = array_map(function ($num) {
return $num ** 2;
}, $arr);
var_dump($res);
?>
5. lehetőség
Használjunk nyíl függvényt:
<?php
$arr = [1, 2, 3, 4, 5];
$res = array_map(fn ($num) => $num ** 2, $arr);
var_dump($res);
?>
6. lehetőség
Legyen most a hatványkitevő, amire a számot
emelni kell, a callback külső változója.
Használjuk ezt a változót,
hozzáférést szerezve hozzá a use segítségével:
<?php
$arr = [1, 2, 3, 4, 5];
$pow = 3;
$res = array_map(function ($num) use ($pow) {
return $num ** $pow;
}, $arr);
var_dump($res);
?>
7. lehetőség
Írjuk át az előző kódot nyíl függvénnyé.
Most a $pow változó
automatikusan elérhető lesz:
<?php
$arr = [1, 2, 3, 4, 5];
$pow = 3;
$res = array_map(fn ($num) => $num ** $pow, $arr);
var_dump($res);
?>
Gyakorlati feladatok
Adott egy sztringeket tartalmazó tömb. Alakítsa át minden tömb elem szövegét nagybetűssé.
Adott egy sztringeket tartalmazó tömb. Fordítsa meg minden tömb elem szövegét úgy, hogy a karakterek fordított sorrendben következzenek.