Kodealgo

Anonymous Function PHP

Anonymous function (fungsi tanpa nama) merupakan fungsi yang tidak memiliki nama, fungsi ini juga dikenal sebagai closures. Fungsi tanpa nama paling sering digunakan sebagai nilai parameter Callable.

Fungsi tanpa nama juga dapat digunakan sebagai nilai variabel, PHP akan secara otomatis mengubah ekspresi tersebut menjadi instance kelas internal Closure. Untuk membuat fungsi tanpa nama, kita bisa menggunakan sintaks fungsi seperti biasa, hanya saja kita tidak perlu memberikan nama.

Berikut beberapa topik yang akan kita bahas terkait anonymous function PHP.

  1. Anonymous Function sebagai Parameter Callable
  2. Menugaskan Anonymous Function ke Variabel
  3. Mengakses Variabel di Lingkup Induk

Anonymous Function sebagai Parameter Callable

Fungsi tanpa nama di PHP paling sering digunakan sebagai nilai parameter Callable, mari kita gunakan contoh fungsi array_map.

Fungsi array_map membutuhkan setidaknya dua parameter, pertama adalah Callable, dan terakhir adalah array. Kami akan menggunakan fungsi ini untuk memodifikasi setiap nama di array $names agar memiliki huruf besar semua.

Karena parameter pertama fungsi array_map mengharapkan Callable, kita dapat menggunakan anonymous function seperti contoh berikut.

$names = ['Budi', 'Bambang', 'Dodi'];

$namesUpper = array_map(function ($name) {
  return strtoupper($name);
}, $names);

var_dump($namesUpper);
// array(3) {
//   [0]=>
//   string(4) "BUDI"
//   [1]=>
//   string(7) "BAMBANG"
//   [2]=>
//   string(4) "DODI"
// }

Selain dapat ditulis secara langsung seperti contoh diatas, kita juga bisa menugaskan fungsi tanpa nama ke sebuah variabel agar dapat dipanggil secara berulangan.

Mari kita modifikasi contoh diatas agar menghasilkan hasil yang sama, tapi di sini kita akan menggunakan fungsi tanpa nama yang ditugaskan ke sebuah variabel bernama $toUpper.


$names = ['Budi', 'Bambang', 'Dodi'];

$toUpper = function ($str)
{
  return strtoupper($str);
};

$namesUpper = array_map($toUpper, $names);

var_dump($namesUpper);
// array(3) {
//   [0]=>
//   string(4) "BUDI"
//   [1]=>
//   string(7) "BAMBANG"
//   [2]=>
//   string(4) "DODI"
// }

Mengakses Variabel di Lingkup Induk

Saat menggunakan fungsi tanpa nama, kita tidak dapat mengakses variabel yang berada di luar badan fungsi tanpa nama.

Jika kita ingin mengakses variabel di lingkup induk anonymous function kita dapat menggunakan kata kunci use ($namaVariabel) sebelum tanda kurung kurawal fungsi tanpa nama.

Mari kita gunakan contoh sederhana, dalam contoh di bawah, kami mengakses variabel yang berada dilingkup induk atau tidak berada di badan anonymous function.

Kode dibawah akan melemparkan kesalahan karena PHP tidak mengetaui nama variabel yang kita panggil di badan fungsi tanpa nama (strtoupper($name)).

$name = 'Budi';

$toUpper = function () {
  return strtoupper($name);
};

var_dump($toUpper());

// PHP Warning:  Undefined variable $name ...

Mari ubah contoh di atas, agar fungsi tanpa nama yang kita buat dapat mengakses variabel di lingkup induk menggunakan kata kunci use.

$name = 'Budi';

$toUpper = function () use ($name) {
  return strtoupper($name);
};

var_dump($toUpper()); // string(4) "BUDI"