আগের Function lesson নাম-ওয়ালা function আর arrow function কভার করেছে। এটা value হিসেবে ব্যবহৃত function কভার করে — ঘোরানো, variable-এ রাখা, আর অন্য function-এ পাঠানো।
কোনো নাম ছাড়া একটি function, সরাসরি একটি variable-এ assign করা বা inline পাঠানো।
$greet = function ($name) {
return "Hello, $name!";
};
echo $greet('Sam'); // Hello, Sam!একটি anonymous function সাধারণত নিজের body-র বাইরের variable দেখতে পায় না — use স্পষ্টভাবে একটি import করে।
$taxRate = 0.08;
$addTax = function ($price) use ($taxRate) {
return $price * (1 + $taxRate);
};
echo $addTax(100); // 108বেশ কয়েকটি built-in PHP function একটি function-কে argument হিসেবে accept করে, প্রতি item-এ একবার চালানোর জন্য।
$numbers = [1, 2, 3, 4, 5];
$doubled = array_map(function ($n) {
return $n * 2;
}, $numbers);
// [2, 4, 6, 8, 10]
$evens = array_filter($numbers, function ($n) {
return $n % 2 === 0;
});
// [2, 4]শর্টকাট হিসেবে Arrow function
আগের Function lesson থেকে arrow function (fn($n) => $n * 2) callback হিসেবেও কাজ করে, আর use ছাড়াই স্বয়ংক্রিয়ভাবে বাইরের variable capture করে — একটি সহজ one-line callback-এর জন্য প্রায়ই ছোট পছন্দ।
function factorial(int $n): int {
if ($n <= 1) {
return 1;
}
return $n * factorial($n - 1);
}
echo factorial(5); // 120সবসময় একটি base case রাখুন
প্রতিটি recursive function-এর একটি base case দরকার — নিজেকে call করা বন্ধ করে এমন একটি শর্ত। এটা ছাড়া, PHP-র memory শেষ না হওয়া পর্যন্ত এটা recurse করতে থাকে।
... দিয়ে prefix করা একটি parameter বাকি প্রতিটি argument একটি array-তে সংগ্রহ করে।
function sum(...$numbers): int {
return array_sum($numbers);
}
echo sum(1, 2, 3); // 6
echo sum(1, 2, 3, 4, 5); // 15Position-এর বদলে argument parameter নাম দিয়ে পাঠানো যায় — বেশ কয়েকটি optional parameter সহ একটি function-এর জন্য useful, যাতে call site-এ প্রতিটি মান কী বোঝায় তা স্পষ্ট থাকে।
function makeUser(string $name, string $role = 'user', bool $active = true) {
// ...
}
makeUser(name: 'Sam', active: false);
// role এর default মান রাখে, active স্পষ্টভাবে সেট করা — ক্রম গুরুত্বপূর্ণ না