ფუნქციები-კოლბეკები 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;
  }
?>

გამოიძახეთ ეს ფუნქცია, პარამეტრად გადაცემული მასივი რიცხვებით და კოლბეკი, რომელიც ამცირებს გადაცემულ რიცხვს კვადრატში.