PHP Professional,Laravel 5.6 Beginning to Advance এবং Zend Certified PHP Engineer (ZCPE ) Course এ সীমিত সংখ্যক আসন বাকি আছে। আগ্রহীদেরকে অতিসত্বর মাসুদ আলম স্যার এর সাথে যোগাযোগ করার জন্য অনুরোধ করা যাচ্ছে। স্যার এর মোবাইল নম্বর : ০১৭২২ ৮১ ৭৫ ৯১

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

PHP তে Anonymous function কি?

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:

You 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 old\n";
}
?>

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

এই ক্যাটাগরির অন্যান্য পোস্ট:

Masud Alam
আমি মাসুদ আলম, বাংলাদেশের ৩৬ তম Zend Certified Engineer । ২০০৯ সালে কম্পিউটার সাইন্স থেকে বেচেলর ডিগ্রী অর্জন করি। দীর্ঘ ৮ বছর আমি Winux Soft, SSL Wireless, IBCS-PRIMAX, Max Group, Canadian International Development Agency (CIDA), Care Bangladesh, World Vision, Hellen Keller সহ বিভিন্ন দেশি বিদেশী কোম্পানিতে ওয়েব ডেভেলপমেন্ট এবং সফটওয়্যার ডেভেলপমেন্ট এর উপর বিভিন্ন লিডিং পজিশন এ চাকরি এবং প্রজেক্ট লিড করি। বিশেষ ভাবে বাংলাদেশের ১০০ জন জেন্ড সার্টিফাইড ইঞ্জিনিয়ার এর মধ্যে ৫২ জন ই আমার হাতে জেন্ড সার্টিফাইড হয়েছে। বর্তমানে TechBeeo Software Company তে সিইও হিসাবে আছি । পাশাপাশি w3programmers ট্রেনিং ইনস্টিটিউট এ PHP এর উপর Professional এবং Advance Zend Certified PHP -7 Engineering কোর্স করাই। আর w3programmers.com সাইট টি আমার।
One comment on “PHP functions পর্ব-৬: PHP Anonymous Functions,lambda and Closures
  1. $luckyDip = array(

    function() {
    echo ‘You got a bag of toffees!’;
    },

    function() {
    echo ‘You got a toy car!’;
    },

    function() {
    echo ‘You got some balloons!’;
    }
    );

    var_dump($luckyDip[0]());
    Answer: You got a bag of toffees!NULL
    So Sir, My Question is why there is a NULL printing After I specify the index?
    And another question is in $luckyDip[$choice](); why we need to put () at the end? Is it showing that we are calling a function?
    Thank you Sir, I love your lessons and try to follow, your work help me a lot. 🙂

Leave a Reply

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