Learn
← Previous Next →

Hari 18: Closure & Higher-Order Functions

55 min Last updated 09 Apr 2026

Closure — Fungsi sebagai Nilai

// Closure disimpan di variabel
$sapa = function(string $nama): string {
    return "Halo, $nama!";
};

echo $sapa("Budi"); // Halo, Budi!

// Closure sebagai parameter
function terapkan(array $data, Closure $fn): array {
    return array_map($fn, $data);
}

$angka = [1, 2, 3, 4, 5];
$hasil = terapkan($angka, fn($x) => $x * 10);
// [10, 20, 30, 40, 50]

Closure menggunakan "use"

$multiplier = 5;
$kali = function($x) use ($multiplier) {
    return $x * $multiplier; // tangkap variabel dari scope luar
};

echo $kali(4); // 20

// use by reference
$total = 0;
$tambah = function($x) use (&$total) { $total += $x; };
$tambah(10); $tambah(20);
echo $total; // 30

Returning Closure (Currying)

function pembuat_salam(string $sapaan): Closure {
    return function(string $nama) use ($sapaan): string {
        return "$sapaan, $nama!";
    };
}

$formal   = pembuat_salam("Selamat pagi");
$informal = pembuat_salam("Hey");

echo $formal("Dr. Budi");  // Selamat pagi, Dr. Budi!
echo $informal("Ari");     // Hey, Ari!

💡 Notice: Closures yang menangkap variabel dari scope luar menggunakan "use". Ini membuat factory function (fungsi yang return fungsi).

Assignment

Buat fungsi pembuat_validator(int $min, int $max): Closure yang return closure untuk validasi angka dalam rentang. Gunakan untuk cek: nilai 85 dalam [0,100] dan nilai 150 dalam [0,100]. Tampilkan "valid" atau "invalid".

Expected output:

valid
invalid
PHP index.php
Solution
Output