PHP Functions
PHP Anonymous, lambda, Closures and Arrow Functions
PHP Anonymous functions কি?
PHP Anonymous functions: 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 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 ?>
PHP তে Arrow function কি?
Arrow functions, যা “short closures” নামেও পরিচিত, PHP 7.4-এ anonymous function গুলোকে আরো Simple এবং সংক্ষিপ্ত ভাবে তৈরির জন্য চালু করা হয়েছিল। Arrow function গুলি এমন পরিস্থিতির জন্য ডিজাইন করা হয়েছে যেখানে আপনাকে ন্যূনতম সিনট্যাক্স সহ ছোট এবং এক লাইনের anonymous function তৈরি করতে হবে। traditional anonymous function গুলির তুলনায় তাদের আরও কমপ্যাক্ট এবং predictable syntax দিয়ে গঠন রয়েছে।
নিম্নে একটি arrow function এর basic syntax নিয়ে আলোচনা করা হলো:
<?php $y = 1; $fn1 = fn($x) => $x + $y; // equivalent to using $y by value: $fn2 = function ($x) use ($y) { return $x + $y; }; var_export($fn1(3)); // Result: 4 ?>
Arrow functions গুলি স্বয়ংক্রিয়ভাবে আশেপাশের scope থেকে ভেরিয়েবলগুলিকে ক্যাপচার করে, এবং এই বিষয়ে traditional anonymous ফাংশনের মতো কাজ করে:
<?php $z = 1; $fn = fn($x) => fn($y) => $x * $y + $z; // Outputs 51 var_export($fn(5)(10)); ?>
একইভাবে anonymous ফাংশনের মতো, arrow ফাংশন সিনট্যাক্স অন্যান্য সব ধরণের ফাঙ্কশনের মতোই, যার মধ্যে parameter এবং return types, default values, বৈচিত্র্য, সেইসাথে বাই-রেফারেন্স পাসিং এবং রিটার্নিং সহ। নীচের সবগুলি arrow ফাংশনের উদাহরণ বৈধ :
<?php fn(array $x) => $x; static fn(): int => $x; fn($x = 42) => $x; fn(&$x) => $x; fn&($x) => $x; fn($x, ...$rest) => $rest; ?>
Static Arrow Function:
<?php $addOne = static function (int $x): int { return $x + 1; }; echo $addOne(1); // Outputs 2 echo PHP_EOL; echo $addOne(2); // Outputs 3 echo PHP_EOL; echo $addOne(3); // Outputs 4 echo PHP_EOL;
Arrow Function with Pass By Reference
$value = 42; $passByReference = fn (&$x) =>$x++; $passByReference($value); echo $value; // This will output 43
একইভাবে anonymous ফাংশনে আমরা ঠিক এইভাবে লিখতাম:
$value = 42; $passByReference = function (&$x) { $x++; }; $passByReference($value); echo $value; // This will output 43
One thought on “PHP Anonymous, lambda, Closures and Arrow Functions”
Leave a Reply
You must be logged in to post a comment.
$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. 🙂