PHP Functions

লেসন ১৩ / ৩৯

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);
}