Зваротныя функцыі ў PHP

Зваротнай функцыяй называецца функцыя, якая перадаецца параметрам у іншую функцыю.

Давайте паглядзім на прыкладзе. Няхай у нас ёсць функцыя, якая першым параметрам прымае лік, а другім параметрам - зваротную функцыю:

php<?php
  function func($num, $calb)
  {
    
  }
?>

Зробім так, каб унутры функцыі наша зваротная функцыя была выклікана для перададзенага ліку:

php<?php
  function func($num, $calb)
  {
    echo $calb($num);
  }
?>

Давайте цяпер паглядзім, якія ёсць варыянты перадачы зваротнай функцыі ў нашую функцыю.

Варыянт 1

Наша зваротная функцыя можа быць звычайнай функцыяй:

php<?php
  function calb($num) {
    return $num ** 2;
  }
?>

У гэтым выпадку ў якасці зваротнай функцыі мы перададзім імя нашай функцыі:

php<?php
  func(3, 'calb');
?>

Унутры функцыі func наша зваротная функцыя будзе выклікана па імі.

Варыянт 2

Наша зваротная функцыя можа быць ананімнай функцыяй, запісанай у зменную:

php<?php
  $calb = function($num) {
    return $num ** 2;
  };
?>

У гэтым выпадку мы параметрам перадаем зменную з нашай функцыяй:

php<?php
  func(3, $calb);
?>

Варыянт 3

Можна перадаць ананімную функцыю адразу параметрам:

php<?php
  func(3, function($num) {
    return $num ** 2;
  });
?>

Варыянт 4

Можна скараціць код, выкарыстоўваючы стрэлачную функцыю:

php<?php
  func(3, fn($num) => $num ** 2);
?>

Практычныя задачы

Задание 1

Дадзена функцыя, параметрам якая прымае масіў і зваротную функцыю, якая прымяняецца да кожнага элемента масіву:

php<?php
  function func($arr, $calb)
  {
    $res = [];
    
    foreach ($arr as $elem) {
      $res[] = $calb($elem);
    }
    
    return $res;
  }
?>

Выклічце гэтую функцыю, у якасці параметра перадаўшы масіў з лікамі і зваротную функцыю, якая ўзводзіць перададзены лік у квадрат.