Callbacks i innebygde funksjoner i PHP

I PHP finnes det en rekke innebygde funksjoner som tar imot callbacks som parameter. Vi vil studere den generelle prinsippet for arbeid med dem ved å bruke funksjonen array_map som eksempel. Denne funksjonen tar imot en callback som første parameter, og en array som andre parameter. Funksjonen bruker callbacken på hvert element i arrayen og returnerer den modifiserte arrayen.

La oss se på alternativer for bruk av denne funksjonen med hensyn til kunnskapen vi har fått tidligere.

Alternativ 1

La oss trekke ut kvadratroten fra hvert element i arrayen ved hjelp av den innebygde funksjonen sqrt. For å gjøre dette, sender vi inn en streng med navnet på denne funksjonen som callback-parameter:

php<?php
  $arr = [1, 2, 3, 4, 5];
  
  $res = array_map('sqrt', $arr);
  var_dump($res);
?>

Alternativ 2

La oss opphøye hvert element i arrayen i andre potens ved hjelp av en vanlig funksjon vi har opprettet. For å gjøre dette, sender vi inn en streng med navnet på denne funksjonen som callback-parameter:

php<?php
  $arr = [1, 2, 3, 4, 5];
  
  function func($num) {
    return $num ** 2;
  }

  $res = array_map('func', $arr);
  var_dump($res);
?>

Alternativ 3

La oss endre funksjonen vår til en anonym funksjon, som er lagret 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);
?>

Alternativ 4

La oss sende den anonyme funksjonen som en parameter:

php<?php
  $arr = [1, 2, 3, 4, 5];
  
  $res = array_map(function ($num) {
    return $num ** 2;
  }, $arr);
  
  var_dump($res);
?>

Alternativ 5

La oss bruke en pilfunksjon:

php<?php
  $arr = [1, 2, 3, 4, 5];
  
  $res = array_map(fn ($num) => $num ** 2, $arr);
  var_dump($res);
?>

Alternativ 6

La oss nå si at potensen som tallet skal opphøyes i, er gitt av en ekstern variabel for callbacken. La oss bruke denne variabelen ved å få tilgang 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);
?>

Alternativ 7

La oss omskrive forrige kode ved å bruke en pilfunksjon. Nå vil variabelen $pow være tilgjengelig automatisk:

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

Praktiske oppgaver

Задание 1

Det er gitt en array med strenger. Oversett teksten i hvert element i arrayen til store bokstaver.

Задание 2

Det er gitt en array med strenger. Snur teksten i hvert element i arrayen slik at tegnene står i omvendt rekkefølge.