Callbacky ve vestavěných funkcích v PHP
V PHP existuje řada vestavěných funkcí,
které jako parametr přijímají callbacky.
Obecný princip práce s nimi si prostudujeme
na příkladu funkce array_map.
Tato funkce přijímá jako první parametr
callback, a jako druhý - pole. Funkce aplikuje
callback na každý prvek pole
a vrátí upravené pole.
Podívejme se na varianty použití této funkce s ohledem na znalosti, které jsme již získali.
Varianta 1
Získáme z každého prvku pole
druhou odmocninu pomocí vestavěné
funkce
sqrt.
K tomu jako callback předáme parametrem
řetězec s názvem této funkce:
<?php
$arr = [1, 2, 3, 4, 5];
$res = array_map('sqrt', $arr);
var_dump($res);
?>
Varianta 2
Umocníme každý prvek pole na druhou pomocí vytvořené obyčejné funkce. K tomu jako callback předáme parametrem řetězec s názvem této funkce:
<?php
$arr = [1, 2, 3, 4, 5];
function func($num) {
return $num ** 2;
}
$res = array_map('func', $arr);
var_dump($res);
?>
Varianta 3
Přepíšeme naši funkci na anonymní, zapsanou v proměnné:
<?php
$arr = [1, 2, 3, 4, 5];
$func = function ($num) {
return $num ** 2;
};
$res = array_map($func, $arr);
var_dump($res);
?>
Varianta 4
Předáme anonymní funkci parametrem:
<?php
$arr = [1, 2, 3, 4, 5];
$res = array_map(function ($num) {
return $num ** 2;
}, $arr);
var_dump($res);
?>
Varianta 5
Použijeme arrow funkci:
<?php
$arr = [1, 2, 3, 4, 5];
$res = array_map(fn ($num) => $num ** 2, $arr);
var_dump($res);
?>
Varianta 6
Nechť je nyní mocnina, na kterou je třeba
umocnit číslo, zadána externí proměnnou
callbacku. Využijeme tuto proměnnou,
a získáme k ní přístup přes use:
<?php
$arr = [1, 2, 3, 4, 5];
$pow = 3;
$res = array_map(function ($num) use ($pow) {
return $num ** $pow;
}, $arr);
var_dump($res);
?>
Varianta 7
Přepišme předchozí kód pomocí arrow
funkce. Nyní bude proměnná $pow
dostupná automaticky:
<?php
$arr = [1, 2, 3, 4, 5];
$pow = 3;
$res = array_map(fn ($num) => $num ** $pow, $arr);
var_dump($res);
?>
Praktické úlohy
Je dáno pole s řetězci. Převeďte text každého prvku pole na velká písmena.
Je dáno pole s řetězci. Obraťte text každého prvku pole tak, aby znaky šly v obráceném pořadí.