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
Нека използваме стрелкова функция:
<?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
Нека пренапишем предишния код чрез стрелкова
функция. Сега променливата $pow
ще бъде достъпна автоматично:
<?php
$arr = [1, 2, 3, 4, 5];
$pow = 3;
$res = array_map(fn ($num) => $num ** $pow, $arr);
var_dump($res);
?>
Практически задачи
Даден е масив от низове. Преобразувайте текста на всеки елемент от масива в главни букви.
Даден е масив от низове. Обърнете текста на всеки елемент от масива така, че символите да са в обратен ред.