Belajar PHP Part 29 : Anonymous Function (Closure)
- 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 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 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();
Studi Kasus 1
$firstName = "Eko";
$lastName = "Kurniawan";
$sayHelloEko = function () use($firstName, $lastName){
echo "Hello $firstName $lastName" . PHP_EOL;
};
$sayHelloEko();
$firstName = "Budi";
$lastName = "Nugraha";
$sayHelloEko();
Kenapa tidak berubah value variablenya ?
Jawaban :
- 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)
- 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()