Function Declaration
function greet($name) {
return "হ্যালো, $name!";
}
echo greet("করিম"); // হ্যালো, করিম!
Parameters ও Default Values
function greet($name = "Guest", $greeting = "হ্যালো") {
return "$greeting, $name!";
}
greet(); // হ্যালো, Guest!
greet("করিম"); // হ্যালো, করিম!
greet("করিম", "শুভ সকাল"); // শুভ সকাল, করিম!
// Named arguments (PHP 8+)
greet(greeting: "শুভ সন্ধ্যা"); // শুভ সন্ধ্যা, Guest!
Type Declarations (PHP 7+)
function add(int $a, int $b): int {
return $a + $b;
}
function greet(string $name): string {
return "Hi, $name";
}
function getUser(int $id): ?array { // nullable
return $id > 0 ? ["id" => $id] : null;
}
function log(string $msg): void { // no return
echo $msg;
}
function random(): int|float { // union (PHP 8+)
return rand(0, 1) ? 42 : 3.14;
}
// Strict mode (file-এর শুরুতে)
declare(strict_types=1);
add(1.5, 2); // ❌ TypeError
Variable-length Arguments
function sum(...$numbers) {
return array_sum($numbers);
}
echo sum(1, 2, 3, 4, 5); // 15
// Typed
function total(int ...$nums): int {
return array_sum($nums);
}
Pass by Value vs Reference
// By Value (default) — copy
function addOne($x) {
$x++;
}
$num = 10;
addOne($num);
echo $num; // 10 (অপরিবর্তিত)
// By Reference (&)
function addOne(&$x) {
$x++;
}
$num = 10;
addOne($num);
echo $num; // 11 ⭐
Variable Scope
$global = "বাইরে";
function test() {
echo $global; // ❌ undefined
global $global; // শুধু তখন access
echo $global; // ✅ "বাইরে"
}
// Static variable (call-এর মধ্যে বজায় থাকে)
function counter() {
static $count = 0;
$count++;
return $count;
}
echo counter(); // 1
echo counter(); // 2
echo counter(); // 3
Anonymous Function (Closure)
$greet = function($name) {
return "হ্যালো, $name!";
};
echo $greet("করিম");
// Array callback
$names = ["rahim", "karim"];
$upper = array_map(function($n) {
return strtoupper($n);
}, $names);
// use() — বাইরের variable capture
$greeting = "স্বাগতম";
$greet = function($name) use ($greeting) {
return "$greeting, $name";
};
Arrow Function (PHP 7.4+)
$double = fn($x) => $x * 2;
$double(5); // 10
// বাইরের variable automatic capture!
$multiplier = 3;
$triple = fn($x) => $x * $multiplier;
$nums = [1, 2, 3, 4];
$squared = array_map(fn($n) => $n ** 2, $nums);
// [1, 4, 9, 16]
Recursive Function
function factorial($n) {
if ($n <= 1) return 1;
return $n * factorial($n - 1);
}
echo factorial(5); // 120
function fibonacci($n) {
return $n < 2 ? $n : fibonacci($n-1) + fibonacci($n-2);
}