Spätné volania vo vstavaných funkciách v PHP
V PHP existuje rad vstavaných funkcií,
ktoré ako parameter prijímajú spätné volania.
Všeobecný princíp práce s nimi si preštudujeme
na príklade funkcie array_map.
Táto funkcia ako prvý parameter prijíma
spätné volanie, a ako druhý - pole. Funkcia aplikuje
spätné volanie na každý prvok poľa
a vráti upravené pole.
Pozrime sa na možnosti použitia tejto funkcie s prihliadnutím na naše predtým získané vedomosti.
Možnosť 1
Vytiahnime z každého prvku poľa
druhú odmocninu pomocou vstavanej
funkcie
sqrt.
Na tento účel ako spätné volanie parameter odovzdáme
reťazec s menom tejto funkcie:
<?php
$arr = [1, 2, 3, 4, 5];
$res = array_map('sqrt', $arr);
var_dump($res);
?>
Možnosť 2
Umocnime každý prvok poľa na druhú pomocou nami vytvorenej obyčajnej funkcie. Na tento účel ako spätné volanie parameter odovzdáme reťazec s menom tejto funkcie:
<?php
$arr = [1, 2, 3, 4, 5];
function func($num) {
return $num ** 2;
}
$res = array_map('func', $arr);
var_dump($res);
?>
Možnosť 3
Upravme našu funkciu na anonymnú, zapísanú do premennej:
<?php
$arr = [1, 2, 3, 4, 5];
$func = function ($num) {
return $num ** 2;
};
$res = array_map($func, $arr);
var_dump($res);
?>
Možnosť 4
Odovzdajme anonymnú funkciu parametrom:
<?php
$arr = [1, 2, 3, 4, 5];
$res = array_map(function ($num) {
return $num ** 2;
}, $arr);
var_dump($res);
?>
Možnosť 5
Použime funkciu šípky:
<?php
$arr = [1, 2, 3, 4, 5];
$res = array_map(fn ($num) => $num ** 2, $arr);
var_dump($res);
?>
Možnosť 6
Nech je teraz stupeň, na ktorý treba
umocniť číslo, daný externou premennou
spätného volania. Využime túto premennú,
pričom získame k nej prístup cez use:
<?php
$arr = [1, 2, 3, 4, 5];
$pow = 3;
$res = array_map(function ($num) use ($pow) {
return $num ** $pow;
}, $arr);
var_dump($res);
?>
Možnosť 7
Prepíšme predchádzajúci kód pomocou funkcie šípky.
Teraz bude premenná $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
Dané pole s reťazcami. Preložte text každého prvku poľa na veľké písmená.
Dané pole s reťazcami. Otočte text každého prvku poľa tak, aby znaky išli v opačnom poradí.