PHP functions পর্ব-৬: PHP Anonymous Functions, and Closures

PHP তে Anonymous function কি?

Anonymous শব্দের অর্থ হচ্ছে নাম বিহীন বা বেনামী, আর anonymous function মানে হচ্ছে নাম বিহীন function বা বেনামী function, সুতরাং PHP তে যখন কোনো function declare বা ঘোষণা করা হয়, কিন্তু function টির কোনো নাম থাকেনা, PHP তে সেই function কে anonymous function বলে।

Anonymous function বুঝার জন্য প্রথমে আমরা একটা সাধারণ function তৈরী করি।

<?php
function makeGreeting($name, $timeOfDay){
  return $timeOfDay." ". $name."!";
}
  
echo makeGreeting("Omran","Good Morning");
//Result: Good Morning Omran!
?>

উপরের function টিকেই anonymous function হিসেবে নিচের মতো declare এবং call করতে পারি।

নোট : anonymous function অবশ্যই semi-colon (;) দিয়ে শেষ করতে হয়।

<?php
// Assign an anonymous function to a variable
$makeGreeting = function( $name, $timeOfDay ) {
  return "Good $timeOfDay, $name!";
};
echo $makeGreeting("Omran","Morning"); 
//Result: Good Morning Omran!
?>

ব্যাখ্যা : পাঠক ভালোভাবে লক্ষ্য করুন, আমরা সাধারণত function keyword লেখার পর function name “অর্থাৎ : function test(){….} “লিখি। কিন্তু উপরের কোডে আমরা তা করি নাই, বরং আমরা নাম ছাড়া function declare করি, এবং variable এ সংরক্ষণ করি। এবং পরবর্তীতে সেই variable এর সাথে parenthesis যোগ করে function হিসেবে কল করি.

PHP তে Lambda function কি?

যখন একটি anonymous function অন্য একটা function এর argument হিসেবে pass হয়, তখন সেটিকে বলা হয় lambda function. চলুন একটি উদাহরণ দেখা যাক:

<?php
// Pass Lambda to function
function shout ($message){
  echo $message();
}
  
// Call function
shout(function(){
  return "Hello world";
});
?>

ব্যাখ্যা : পাঠক ভালোভাবে লক্ষ্য করুন, shout function এর $message parameter টি argument হিসেবে একটি anonymous function receive করেছে।

PHP তে কি anonymous function কে array element হিসেবে ব্যবহার করা যাবে ?

অবশ্যই PHP তে anonymous function কে array element হিসেবে ব্যবহার করা যাবে। চলুন একটি উদাহরণ দেখা যাক:

<?php
// Store 3 anonymous functions in an array
$luckyDip = array(
 
function() {
echo 'You got a bag of toffees!';
},
 
function() {
echo 'You got a toy car!';
},
 
function() {
echo 'You got some balloons!';
}
);
// Call a random function
$choice = rand( 0, 2 );
$luckyDip[$choice]();
?>

Random Result:

1You got a toy car!

ব্যাখ্যা : এখানে $choice variable টি rand function দিয়ে 0-2 range এর মধ্যে random number generate করবে। আর আমাদের array টির index ও 0-2 এর মধ্যে, তাই এখানে তিনটি anonymous function থেকে randomly যেকোনো একটির result আসবে।

PHP তে anonymous function কি callback function হিসেবে ব্যবহার করা যাবে?

হ্যা PHP তে anonymous function কে call back function হিসেবে ব্যবহার করা যাবে। চলুন একটা উদাহরণ দেখা যাক।

<?php
$arr = range(1, 10);
foreach(array_filter($arr, function($val) { return $val % 2 == 0; }) as $val){
    echo $val,"n";
}
//Result: 2,4,6,8,10
?>

ব্যাখ্যা : এখানে array_filter function এর কাজ হচ্ছে কোনো array কে অন্য যেকোনো function দিয়ে array value গুলোকে filter করা। আর উপরের উদাহরণে , আমরা অন্য যেকোনো সাধারণ function এর পরিবর্তে anonymous function ব্যবহার করেছি।

এবার চলুন আমরা anonymous function ব্যবহার করে একটি number sorting করে ফেলি।

<?php
$people = array(
  array( 'name' => 'Omran', 'age' => 39 ),
  array( 'name' => 'ShiShir', 'age' => 23 ),
  array( 'name' => 'Badol', 'age' => 46 )
);
 
usort( $people, function( $personA, $personB ) {
return ( $personA['age'] < $personB['age'] ) ? -1 : 1;
} );
 
foreach($people as $val){
    echo "$val[name] is $val[age] years oldn";
}
?>

Result

ShiShir is 23 years old
Omran is 39 years old
Badol is 46 years old

PHP তে closures কি ?

closure হচ্ছে একটা object যা anonymous function কে represent করে । অন্য ভাবে বলা যায়, closure হচ্ছে anonymous function কে Object Oriented way তে ব্যবহার করার মাধ্যম। PHP তে closure দিয়ে Anonymous function এর বাহিরের কোনো variable কে anonymous function এর মধ্যে ব্যবহার করা যায় । চলুন একটা উদাহরণ থেকে বুঝা যাক।

উদাহরণ ১: closure ছাড়া anonymous function :

<?php
$client="Farhan";
$output=function(){
        echo "Welcome ".$client;
};
 
$output(); // will show error
?>

উদাহরণ ২: closure দিয়ে anonymous function :

<?php
$client="Farhan";
$output=function() use($client){
        echo "Welcome ".$client;
};
 
$output();
//output: Welcome Farhan
?>

closure দিয়ে আরো একটা anonymous function দেখুন :

<?php
function myClosure( $num ) {
return function( $x ) use( $num ){
return $num * $x;
};
}
 
$closure = myClosure( 10 );
echo $closure( 2 ).'n';// Result: 20
echo $closure( 3 ).'n';// Result: 30
?>

Leave A Reply

Your email address will not be published. Required fields are marked *