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-усул

Номсиз функцияни darhol параметр сифатида ўтказиш мумкин:

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

4-усул

Ўқ функциясидан фойдаланиб, кодни қисқартириш мумкин:

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

Амалий машқлар

Задание 1

Массив ва har bir массив элементига қўлланиладиган коллбэкни параметр сифатида қабул қилувчи функция берилган:

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

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