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);
?>
Амалий вазифалар
Сатрлар билан массив берилган. Массивнинг ҳар бир элементининг матнини юқори регистрга ўгиринг.
Сатрлар билан массив берилган. Массивнинг ҳар бир элементининг матнини шақилдираб, белгилар тескари тартибда ўтиши учун ўгиринг.