Callbacks във вградени функции в PHP

В PHP има редица вградени функции, които приемат callbacks като параметър. Общия принцип на работа с тях ще изучим на примера на функцията array_map. Тази функция приема като първи параметър callback, а като втори - масив. Функцията прилага callback към всеки елемент от масива и връща променения масив.

Нека да разгледаме вариантите на използване на тази функция, като вземем предвид знанията, които вече сме придобили.

Вариант 1

Нека извлечем от всеки елемент от масива квадратен корен с помощта на вградената функция sqrt. За целта като callback параметър ще предадем низ с името на тази функция:

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

Вариант 2

Нека повдигнем всеки елемент от масива на квадрат с помощта на създадена от нас обикновена функция. За целта като callback параметър ще предадем низ с името на тази функция:

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

Нека сега степента, на която трябва да се повдигне числото, да се задава от външна променлива на callback. Нека използваме тази променлива, като получим достъп до нея чрез 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

Даден е масив от низове. Обърнете текста на всеки елемент от масива така, че символите да са в обратен ред.