Callbacky ve vestavěných funkcích v PHP

V PHP existuje řada vestavěných funkcí, které jako parametr přijímají callbacky. Obecný princip práce s nimi si prostudujeme na příkladu funkce array_map. Tato funkce přijímá jako první parametr callback, a jako druhý - pole. Funkce aplikuje callback na každý prvek pole a vrátí upravené pole.

Podívejme se na varianty použití této funkce s ohledem na znalosti, které jsme již získali.

Varianta 1

Získáme z každého prvku pole druhou odmocninu pomocí vestavěné funkce sqrt. K tomu jako callback předáme parametrem řetězec s názvem této funkce:

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

Varianta 2

Umocníme každý prvek pole na druhou pomocí vytvořené obyčejné funkce. K tomu jako callback předáme parametrem řetězec s názvem této funkce:

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

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

Varianta 3

Přepíšeme naši funkci na anonymní, zapsanou v proměnné:

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

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

Varianta 4

Předáme anonymní funkci parametrem:

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

Varianta 5

Použijeme arrow funkci:

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

Varianta 6

Nechť je nyní mocnina, na kterou je třeba umocnit číslo, zadána externí proměnnou callbacku. Využijeme tuto proměnnou, a získáme k ní přístup přes 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);
?>

Varianta 7

Přepišme předchozí kód pomocí arrow funkce. Nyní bude proměnná $pow dostupná automaticky:

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

Praktické úlohy

Задание 1

Je dáno pole s řetězci. Převeďte text každého prvku pole na velká písmena.

Задание 2

Je dáno pole s řetězci. Obraťte text každého prvku pole tak, aby znaky šly v obráceném pořadí.