Belajar PHP Part 29 : Anonymous Function (Closure)

anonymous function

  • Anonymous function adalah function tanpa nama, di PHP disebut juga dengan closure
  • Anonymous function biasanya digunakan sebagai argument atau sebagai value di variable
  • Anonymous function membuat kita bisa mengirim function sebagai argument di function lainnya

Contoh Anonymous Function

$sayHello = function (string $name) {
    echo "Hello $name" . PHP_EOL;
};

$sayHello("Eko");
$sayHello("Budi");

anonymous function

Anonymous Function sebagai Argument

function sayGoodBye (string $name, $filter) {
    $finalName = $filter($name);
    echo "Good Bye $finalName" . PHP_EOL;
}

sayGoodBye("Eko", function (string $name) : string {
    return strtoupper($name);
});

anonymous function sebagai argument

Anonymous Function dengan Variable function

function sayGoodBye (string $name, $filter) {
    $finalName = $filter($name);
    echo "Good Bye $finalName" . PHP_EOL;
}


$filterFunction = function (string $name) : string {
    return strtoupper($name);
};

sayGoodBye("Eko", $filterFunction);

Mengakses Variable di Luar Closure

  • Secara default, anonymous function tidak bisa mengakses variable yang terdapat diluar function
  • Jika kita ingin menggunakan variable yang terdapat di luar anonymous function, kita perlu secara explicit menyebutkannya menggunakan kata kunci use lalu diikuti variable-variable yang kita ingin kita gunakan

Sebelum Menggunakan use()

$firstName = "Eko";
$lastName = "Kurniawan";

$sayHelloEko = function (){
    echo "Hello $firstName $lastName" . PHP_EOL;
};
Pasti Output nya error saat di jalankan

Sesudah Menggunakan use()

$firstName = "Eko";
$lastName = "Kurniawan";

$sayHelloEko = function () use($firstName, $lastName){
    echo "Hello $firstName $lastName" . PHP_EOL;
};

$sayHelloEko();

mengakses variable di luar clousre

Studi Kasus 1

$firstName = "Eko";
$lastName = "Kurniawan";

$sayHelloEko = function () use($firstName, $lastName){
    echo "Hello $firstName $lastName" . PHP_EOL;
};

$sayHelloEko();

$firstName = "Budi";
$lastName = "Nugraha";
$sayHelloEko();

mengganti value variable

Kenapa tidak berubah value variablenya ?

Jawaban :
  1. Saat membuat anonymous function dan memasukan use($firstName, $lastName), secara otomatis isi dari variable $firstName = "Eko"; dan $lastName = "Kurniawan"; akan di salin ke use($firstName, $lastName)
  2. Jadi ketika mengganti value variable di bawahnya menjadi $firstName = "Budi"; $lastName = "Nugraha"; dan tetep tidak akan berubah di dalam anonymous $sayHelloEko(); di bawah dan valuenya akan tetep pertama kali di buat di use()

Next Post Previous Post
No Comment
Add Comment
comment url