Spätné volania vo vstavaných funkciách v PHP

V PHP existuje rad vstavaných funkcií, ktoré ako parameter prijímajú spätné volania. Všeobecný princíp práce s nimi si preštudujeme na príklade funkcie array_map. Táto funkcia ako prvý parameter prijíma spätné volanie, a ako druhý - pole. Funkcia aplikuje spätné volanie na každý prvok poľa a vráti upravené pole.

Pozrime sa na možnosti použitia tejto funkcie s prihliadnutím na naše predtým získané vedomosti.

Možnosť 1

Vytiahnime z každého prvku poľa druhú odmocninu pomocou vstavanej funkcie sqrt. Na tento účel ako spätné volanie parameter odovzdáme reťazec s menom tejto funkcie:

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

Možnosť 2

Umocnime každý prvok poľa na druhú pomocou nami vytvorenej obyčajnej funkcie. Na tento účel ako spätné volanie parameter odovzdáme reťazec s menom tejto funkcie:

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

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

Možnosť 3

Upravme našu funkciu na anonymnú, zapísanú do premennej:

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

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

Možnosť 4

Odovzdajme anonymnú funkciu parametrom:

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

Možnosť 5

Použime funkciu šípky:

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

Možnosť 6

Nech je teraz stupeň, na ktorý treba umocniť číslo, daný externou premennou spätného volania. Využime túto premennú, pričom získame k nej prístup cez 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);
?>

Možnosť 7

Prepíšme predchádzajúci kód pomocou funkcie šípky. Teraz bude premenná $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

Dané pole s reťazcami. Preložte text každého prvku poľa na veľké písmená.

Задание 2

Dané pole s reťazcami. Otočte text každého prvku poľa tak, aby znaky išli v opačnom poradí.