Колбеци у уграђеним функцијама у PHP

У PHP постоји низ уграђених функција, које као параметар примају колбеке. Општи принцип рада са њима ћемо проучити на примеру функције array_map. Ова функција првим параметром прима колбек, а другим - низ. Функција примењује колбек на сваки елемент низа и враћа измењени низ.

Хајде да погледамо варијанте коришћења ове функције узимајући у обзир знања која смо раније стекли.

Варијанта 1

Извући ћемо из сваког елемента низа квадратни корен помоћу уграђене функције sqrt. За то ћемо као колбек параметром проследити стринг са именом те функције:

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

Варијанта 2

Подићи ћемо сваки елемент низа на квадрат помоћу креиране наше обичне функције. За то ћемо као колбек параметром проследити стринг са именом те функције:

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

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

Варијанта 3

Преправићемо нашу функцију у анонимну, записану у променљиву:

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

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

Варијанта 4

Проследићемо анонимну функцију параметром:

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

Варијанта 5

Користићемо стреличасту функцију:

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

Варијанта 6

Нека сада степен, у који треба подићи број, буде задат спољном променљивом колбека. Искористићемо ову променљиву, добивши приступ њој преко 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);
?>

Варијанта 7

Преписаћемо претходни код преко стреличасте функције. Сада ће променљива $pow бити доступна аутоматски:

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

Практични задаци

Задание 1

Дат је низ са стринговима. Преведите текст сваког елемента низа у велика слова.

Задание 2

Дат је низ са стринговима. Обрните текст сваког елемента низа тако да карактери иду у обрнутом редоследу.