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<?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<?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<?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<?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<?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<?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<?php
  $arr = [1, 2, 3, 4, 5];
  $pow = 3;
  
  $res = array_map(fn ($num) => $num ** $pow, $arr);
  var_dump($res);
?>

Praktiske opgaver

Задание 1

Der er givet et array med strenge. Oversæt teksten i hvert element i arrayet til store bogstaver.

Задание 2

Der er givet et array med strenge. Vend teksten i hvert element i arrayet om, så tegnene står i omvendt rækkefølge.