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;
  }
?>

Կանչեք այս ֆունկցիան՝ որպես պարամետր փոխանցելով թվերով զանգված և կոլբեք, որը բարձրացնում է փոխանցված թիվը քառակուսի: