Callbacks i indbyggede funktioner i PHP
I PHP er der en række indbyggede funktioner,
som tager callbacks som parameter.
Vi vil studere det generelle princip for arbejde med dem
ved hjælp af funktionen array_map som eksempel.
Denne funktion tager en callback som første parameter
og et array som andet. Funktionen anvender
callbacken på hvert element i arrayet
og returnerer det modificerede array.
Lad os se på mulighederne for at bruge denne funktion i lyset af de kendskaber, vi tidligere har erhvervet.
Mulighed 1
Lad os udtrække kvadratroden af hvert element i arrayet
ved hjælp af den indbyggede funktion
sqrt.
For at gøre dette, sender vi navnet på denne funktion
som en streng i callback-parameteren:
<?php
$arr = [1, 2, 3, 4, 5];
$res = array_map('sqrt', $arr);
var_dump($res);
?>
Mulighed 2
Lad os opløfte hvert element i arrayet til anden potens ved hjælp af en almindelig funktion, vi har oprettet. For at gøre dette, sender vi navnet på denne funktion som en streng i callback-parameteren:
<?php
$arr = [1, 2, 3, 4, 5];
function func($num) {
return $num ** 2;
}
$res = array_map('func', $arr);
var_dump($res);
?>
Mulighed 3
Lad os ændre vores funktion til en anonym funktion, gemt i en variabel:
<?php
$arr = [1, 2, 3, 4, 5];
$func = function ($num) {
return $num ** 2;
};
$res = array_map($func, $arr);
var_dump($res);
?>
Mulighed 4
Lad os sende den anonyme funktion som en parameter:
<?php
$arr = [1, 2, 3, 4, 5];
$res = array_map(function ($num) {
return $num ** 2;
}, $arr);
var_dump($res);
?>
Mulighed 5
Lad os bruge en pilfunktion:
<?php
$arr = [1, 2, 3, 4, 5];
$res = array_map(fn ($num) => $num ** 2, $arr);
var_dump($res);
?>
Mulighed 6
Lad eksponenten, som tallet skal opløftes til,
nu være defineret af en ekstern variabel
for callbacken. Lad os bruge denne variabel
ved at få adgang til den via use:
<?php
$arr = [1, 2, 3, 4, 5];
$pow = 3;
$res = array_map(function ($num) use ($pow) {
return $num ** $pow;
}, $arr);
var_dump($res);
?>
Mulighed 7
Lad os omskrive den foregående kode ved hjælp af en pilfunktion.
Nu vil variablen $pow
være tilgængelig automatisk:
<?php
$arr = [1, 2, 3, 4, 5];
$pow = 3;
$res = array_map(fn ($num) => $num ** $pow, $arr);
var_dump($res);
?>
Praktiske opgaver
Der er givet et array med strenge. Oversæt teksten i hvert element i arrayet til store bogstaver.
Der er givet et array med strenge. Vend teksten i hvert element i arrayet om, så tegnene står i omvendt rækkefølge.