Зваротныя функцыі ў убудаваных функцыях у 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

Дадзены масіў з радкамі. Перавярніце тэкст кожнага элемента масіва так, каб сімвалы ішлі у адваротным парадку.