
PHP5 Anonymous Function / Lambda & Closure
Setelah kita menyelesaikan pembelajaran sederhana oop dan berlatih membuat kalkulator sederhana dengan php oop, selanjutnya kita mempelajari Anonymous Function / Lambda dan Closure pada php. Anonymous Function adalah sebuah function php yang tidak diketahui namanya. Maksud dari tanpa nama adalah tidak memberikan nama untuk function yang kita buat. Lalu bagaimana cara membuat dan memanggil function tersebut ? Biasanya kita membuat function dengan syntax berikut ini.
<?php
function NamaMahasiswa()
{
return "Nurul Imam";
}
function Sapa($nama)
{
echo "Hai, ".$nama."<br />";
}
Sapa(NamaMahasiswa());
?>
Syntax diatas membuat 2 function, function pertama NamaMahasiswa()
untuk menampilkan Nurul Imam dan function kedua Sapa($nama)
yang menampilkan Hai dan menerima parameter string $nama
yang kita isi dengan NamaMahasiswa()
yang berisi string. Silahkan dicoba dan dijalankan.
Jika function biasa seperti diatas ada nama functionnya. Nah, untuk Anonymous Funtion tidak mempunyai nama. Perhatikan syntax berikut ini.
<?php
$nama = function ()
{
return "Nurul Imam";
};
function Sapa($nama)
{
echo "Hai, ".$nama."<br />";
}
Sapa($nama());
?>
Sudah paham dengan Anonymous Function ? Oke, kita lanjut ke bagian Closure. Closure ini mirip dengan Anonymous Function. Namun, Closure dapat menerima parameter dan mengakses variable dari luar fungsi. Contohnya bisa anda perhatikan syntax berikut ini.
<?php
$namadepan = "Nurul";
$namabelakang = "Imam";
$namalengkap = function () use ($namadepan, $namabelakang)
{
return $namadepan." ".$namabelakang;
};
function Sapa($nama)
{
echo "Hai, ".$nama."<br />";
}
Sapa($nama());
?>
Closure ini biasanya digunakan pada fungsi yang memerlukan callback sebagai parameternya. Apa itu callback ? Callback adalah parameter yang berbentuk fungsi. Contohnya fungsi bawaan php adalah array_walk() yang mengiterasi (sama seperti foreach) elemen dari suatu array. Parameter pertama dari array_walk() ini array dan parameter keduanya adalah callback. Callback ini adalah closure. Paham yah :D Oke kita coba syntax dibawah ini biar paham.
<?php
$minimal = 60;
$mahasiswa = array(
array("nama" => "Nurul Imam",
"nilai" => 90),
array("nama" => "Zaenal Muttaqien",
"nilai" => 55)
);
array_walk($mahasiswa, function ($siswa) use ($minimal) {
echo "Nama : ".$siswa['nama']."<br />";
echo "Nilai : ".$siswa['nilai']."<br />";
echo "Keterangan : ";
if ($siswa['nilai'] >= $minimal) {
echo "Lulus <br /><br />";
} else {
echo "Gagal <br /><br />";
}
});
?>
Syntax diatas menggunakan fungsi array_walk() untuk melooping semua elemen dari array $mahasiswa dan parameter kedua berisikan closure untuk memproses setiap elemen array $mahasiswa tadi agar menampilkan nama, nilai, dan keterangan dengan berdasarkan variable $minimal. Silahkan lihat demonya dibawah ini.
Sekian pembelajaran php oop sesi Anonymous Function / Lambda & Closure. Pembelajaran selanjutnya akan membahas tentang Fungsi Autoloader dalam PHP5. Pembahasan ini akan terus berlanjut, jadi tetep pantengin yah Daftar Pembelajaran PHP OOP ini. :)
ok sip gan, sangat bermanfaat
Sip, sama-sama :)
Terima kasih atas penjelasannya, sangat bermanfaat ilmunya.
Andai closure tidak perlu menggunakan keyword ‘use’ untuk menggunakan variable dari luar fungsi, pasti jadi lebih praktis ya gan :D sayangnya rules-nya memang harus seperti itu.. hehe
Anyway, thanks.
Ada cara lain, manfaatin superglobals buat akses variabel diluar scope anonymous function
$name = ‘John';
$result = function ($arg){
echo $GLOBALS[‘name’] .’ ‘. $arg;
};
echo $result(‘Doe’);
oh gitu rupanya gan, mantap
wah blognya keren, ini pakai wordpress ya ?
Saya suka dengan artikelnya.
RALAT bukannya yg bagian ini (line 14):
Sapa($nama());
Seharusnya begini om ?
Sapa($namalengkap());
ijin copy gan
koplakk gini doangg