Зваротныя функцыі ў убудаваных функцыях у PHP
У PHP ёсць шэраг убудаваных функцый,
якія параметрам прымаюць зваротныя функцыі.
Агульны прынцып працы з імі мы вывучым
на прыкладзе функцыі array_map
.
Гэтая функцыя першым параметрам прымае
зваротную функцыю, а другім - масіў. Функцыя ўжывае
зваротную функцыю да кожнага элемента масіва
і вяртае зменены масіў.
Давайце паглядзім на варыянты выкарыстання гэтай функцыі з улікам атрыманых намі раней ведаў.
Варыянт 1
Вынямем з кожнага элемента масіва
квадратны корань з дапамогай убудаванай
функцыі
sqrt
.
Для гэтага ў якасці зваротнай функцыі параметрам перададзім
радок з імем гэтай функцыі:
<?php
$arr = [1, 2, 3, 4, 5];
$res = array_map('sqrt', $arr);
var_dump($res);
?>
Варыянт 2
Возьмем кожны элемент масіва ў квадрат з дапамогай створанай намі звычайнай функцыі. Для гэтага ў якасці зваротнай функцыі параметрам перададзім радок з імем гэтай функцыі:
<?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
Хай цяпер ступень, у якую трэба
ўзвесці лік, задаецца знешняй зменнай
зваротнай функцыі. Скарыстаемся гэтай зменнай,
атрымаўшы да яе доступ праз 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);
?>
Практычныя задачы
Дадзены масіў з радкамі. Перакладзіце тэкст кожнага элемента масіва ў верхні рэгістр.
Дадзены масіў з радкамі. Перавярніце тэкст кожнага элемента масіва так, каб сімвалы ішлі у адваротным парадку.