Функсияҳои callback дар PHP

Callback функсияе номида мешавад, ки ба унвони параметр ба функсияи дигар дода мешавад.

Биёед ба мисол нигарем. Фарз кунем, ки мо функсияе дорем, ки ба унвони параметри аввал адад ва ба унвони параметри дуюм - callback қабул мекунад:

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

Биёед тавре созем, ки дар дохили функсия callback-и мо барои адади додашуда фарохонда шавад:

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

Ҳоло биёед бубинем, ки чӣ гуна вариантҳои додани callback ба функсияи мо мавҷуданд.

Варианти 1

Callback-и мо метавонад функсияи оддӣ бошад:

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

Дар ин ҳолат ба унвони callback мо номи функсияи худро медиҳем:

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

Дар дохили функсияи func callback-и мо бо ном фарохонда мешавад.

Варианти 2

Callback-и мо метавонад функсияи гумном бошад, ки дар тағирёбанда сабт шудааст:

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

Функсияе дода шудааст, ки параметраш массив ва callback-ро қабул мекунад, ки ба ҳар як элементи массив татбиқ карда мешавад:

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

Ин функсиеро фарохонед, ба унвони параметр массиве бо ададҳо ва callback-еро дода, ки адади додашударо ба квадрат мебарад.