Callbacks во вградени функции во PHP
Во PHP постојат бројни вградени функции,
кои како параметар прифаќаат callbacks.
Општиот принцип на работа со нив ќе го проучиме
на примерот на функцијата array_map.
Оваа функција како прв параметар прифаќа
callback, а како втор - низа. Функцијата применува
callback на секој елемент од низата
и ја враќа променетата низа.
Ајде да ги погледнеме опциите за користење на оваа функција земајќи ги предвид претходно добиените знаења.
Варијанта 1
Да го извлечеме квадратниот корен од
секој елемент од низата користејќи ја вградената
функција
sqrt.
За да го направиме ова, како callback параметар ќе ја пренесеме
низата со името на оваа функција:
<?php
$arr = [1, 2, 3, 4, 5];
$res = array_map('sqrt', $arr);
var_dump($res);
?>
Варијанта 2
Да го подигнеме на квадрат секој елемент од низата користејќи ја создадената обична функција. За да го направиме ова, како callback параметар ќе ја пренесеме низата со името на оваа функција:
<?php
$arr = [1, 2, 3, 4, 5];
function func($num) {
return $num ** 2;
}
$res = array_map('func', $arr);
var_dump($res);
?>
Варијанта 3
Да ја претвориме нашата функција во анонимна функција, запишана во променлива:
<?php
$arr = [1, 2, 3, 4, 5];
$func = function ($num) {
return $num ** 2;
};
$res = array_map($func, $arr);
var_dump($res);
?>
Варијанта 4
Да ја пренесеме анонимната функција како параметар:
<?php
$arr = [1, 2, 3, 4, 5];
$res = array_map(function ($num) {
return $num ** 2;
}, $arr);
var_dump($res);
?>
Варијанта 5
Да користиме arrow функција:
<?php
$arr = [1, 2, 3, 4, 5];
$res = array_map(fn ($num) => $num ** 2, $arr);
var_dump($res);
?>
Варијанта 6
Сега, степенот до кој треба
да се подигне бројот, нека биде даден со надворешна променлива
на callback-от. Да ја искористиме оваа променлива,
пристапувајќи до неа преку use:
<?php
$arr = [1, 2, 3, 4, 5];
$pow = 3;
$res = array_map(function ($num) use ($pow) {
return $num ** $pow;
}, $arr);
var_dump($res);
?>
Варијанта 7
Да го преработиме претходниот код со arrow
функција. Сега променливата $pow
ќе биде достапна автоматски:
<?php
$arr = [1, 2, 3, 4, 5];
$pow = 3;
$res = array_map(fn ($num) => $num ** $pow, $arr);
var_dump($res);
?>
Практични задачи
Дадена е низа со стрингови. Преведете го текстот на секој елемент од низата во големи букви.
Дадена е низа со стрингови. Превртете го текстот на секој елемент од низата така што знаците ќе одат во обратен редослед.