Callbacki we wbudowanych funkcjach w PHP
W PHP istnieje szereg wbudowanych funkcji,
które przyjmują callbacki jako parametr.
Ogólną zasadę pracy z nimi poznamy
na przykładzie funkcji array_map.
Ta funkcja przyjmuje jako pierwszy parametr
callback, a jako drugi - tablicę. Funkcja stosuje
callback do każdego elementu tablicy
i zwraca zmodyfikowaną tablicę.
Przyjrzyjmy się opcjom użycia tej funkcji, uwzględniając wiedzę, którą wcześniej zdobyliśmy.
Opcja 1
Pobierzmy pierwiastek kwadratowy
z każdego elementu tablicy za pomocą wbudowanej
funkcji
sqrt.
Aby to zrobić, jako callback przekażemy parametrem
ciąg znaków z nazwą tej funkcji:
<?php
$arr = [1, 2, 3, 4, 5];
$res = array_map('sqrt', $arr);
var_dump($res);
?>
Opcja 2
Podnieśmy każdy element tablicy do kwadratu za pomocą utworzonej przez nas zwykłej funkcji. Aby to zrobić, jako callback parametrem przekażemy ciąg znaków z nazwą tej funkcji:
<?php
$arr = [1, 2, 3, 4, 5];
function func($num) {
return $num ** 2;
}
$res = array_map('func', $arr);
var_dump($res);
?>
Opcja 3
Przekształćmy naszą funkcję na funkcję anonimową, zapisaną w zmiennej:
<?php
$arr = [1, 2, 3, 4, 5];
$func = function ($num) {
return $num ** 2;
};
$res = array_map($func, $arr);
var_dump($res);
?>
Opcja 4
Przekażmy funkcję anonimową parametrem:
<?php
$arr = [1, 2, 3, 4, 5];
$res = array_map(function ($num) {
return $num ** 2;
}, $arr);
var_dump($res);
?>
Opcja 5
Użyjmy funkcji strzałkowej:
<?php
$arr = [1, 2, 3, 4, 5];
$res = array_map(fn ($num) => $num ** 2, $arr);
var_dump($res);
?>
Opcja 6
Niech teraz potęga, do której trzeba
podnieść liczbę, będzie określona przez zewnętrzną zmienną
callbacka. Skorzystajmy z tej zmiennej,
uzyskując do niej dostęp poprzez use:
<?php
$arr = [1, 2, 3, 4, 5];
$pow = 3;
$res = array_map(function ($num) use ($pow) {
return $num ** $pow;
}, $arr);
var_dump($res);
?>
Opcja 7
Przepiszmy poprzedni kod za pomocą funkcji strzałkowej.
Teraz zmienna $pow
będzie dostępna automatycznie:
<?php
$arr = [1, 2, 3, 4, 5];
$pow = 3;
$res = array_map(fn ($num) => $num ** $pow, $arr);
var_dump($res);
?>
Zadania praktyczne
Dana jest tablica z ciągami znaków. Przetłumacz tekst każdego elementu tablicy na wielkie litery.
Dana jest tablica z ciągami znaków. Odwróć tekst każdego elementu tablicy tak, aby znaki szły w odwrotnej kolejności.