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

এই ফাংশনটি কল করুন, প্যারামিটার হিসেবে সংখ্যা সহ একটি অ্যারে এবং একটি কলব্যাক পাস করে, যা প্রদত্ত সংখ্যাকে বর্গ করে।