Menu

Arrow Function PHP: Sintaks fn() => dan Contohnya

Arrow function adalah fungsi anonim berisi satu ekspresi yang ditulis fn($x) => $x * 2. Fungsi ini otomatis memakai variabel dari luar, sebagai nilai, tanpa use. Pelajari sintaksnya, cara penangkapan variabel bekerja, tipe, callback untuk array_map dan usort, serta kapan sebaiknya memakai closure lengkap.

Halaman ini dilengkapi editor yang bisa dijalankan. Edit, jalankan, dan lihat output-nya seketika.

Arrow function adalah fungsi anonim yang pendek: fn($x) => $x * 2. Body setelah => berupa satu ekspresi yang nilainya dikembalikan, dan variabel apa pun dari kode di sekitarnya yang dipakai ekspresi itu otomatis ditangkap sebagai nilai. Arrow function ada sejak PHP 7.4 dan kebanyakan dipakai sebagai callback.

Sintaksnya

fn, daftar parameter, =>, lalu satu ekspresi. Tipe parameter, nilai bawaan, dan tipe kembalian bekerja sama seperti di fungsi biasa:

Tidak ada kata kunci return dan tidak ada kurung kurawal. Ekspresi yang panjang tetap bisa dipecah ke beberapa baris supaya mudah dibaca.

Variabel luar ditangkap sebagai nilai

Arrow function melihat setiap variabel di scope tempat ia dibuat. Nilai-nilainya disalin pada saat itu. Perubahan di dalam tetap di dalam, dan perubahan di luar setelah fungsi dibuat tidak terlihat:

Inilah perbedaan utamanya dengan function () use (&$count), yang bisa berbagi variabel lewat referensi. Arrow function tidak bisa mengisi ulang variabel dari luar. Ia tetap bisa mengubah objek yang ditangkapnya (salinannya adalah penunjuk ke objek yang sama), dan parameter yang dideklarasikan sebagai referensi bekerja seperti di fungsi mana pun: fn(array &$list) => $list[] = 'x'.

Callback untuk array_map, array_filter, dan usort

Sebagian besar fungsi array menerima callback, dan di situlah arrow function paling banyak memangkas kode yang berisik. Bandingkan satu filter yang ditulis dengan dua cara:

<=> mengembalikan -1, 0, atau 1, persis yang dibutuhkan usort(), jadi mengurutkan berdasarkan sebuah field cukup satu baris. Tukar $a dan $b untuk mengurutkan secara menurun.

Arrow function yang mengembalikan arrow function

Variabel yang ditangkap termasuk parameter dari arrow function yang membungkusnya, jadi kamu bisa menyarangkannya untuk membuat fungsi dari nilai lain:

Perhatikan bahwa array_filter() mempertahankan key aslinya, karena itulah hasilnya dimulai dari indeks 1.

fn vs function: kapan kamu butuh closure lengkap

Arrow function tidak lagi cukup saat body-nya butuh lebih dari satu ekspresi atau harus mengubah variabel dari luar. Saat itu, pakai fungsi anonim:

fn($x) => ...function ($x) use ($y) { ... }
Bodysatu ekspresipernyataan apa pun
Returnotomatisreturn eksplisit
Variabel luarsemua yang dipakai, otomatishanya yang ditulis di use
Tangkap lewat referensitidakya, use (&$y)
Tersedia sejakPHP 7.4PHP 5.3

Saat sebuah arrow function terasa sesak, sering kali itu tanda tugasnya sebenarnya dua tugas. Memecahnya menjadi filter dan penjumlahan, seperti di atas, membuat setiap callback tetap satu ekspresi.

Pertanyaan yang sering diajukan

Apa itu arrow function di PHP?

Fungsi anonim pendek yang diperkenalkan di PHP 7.4: fn($x) => $x * 2. Body-nya berupa satu ekspresi yang nilainya otomatis dikembalikan, dan fungsi ini bisa membaca variabel dari scope di sekitarnya tanpa klausa use.

Apakah arrow function PHP bisa berisi beberapa baris?

Tidak. Body setelah => harus berupa satu ekspresi; tidak ada blok berisi pernyataan. Kamu boleh memecah ekspresi yang panjang ke beberapa baris, tetapi kalau butuh if, loop, atau beberapa pernyataan, pakai function () use (...) { ... } sebagai gantinya.

Apakah arrow function bisa mengubah variabel dari luar?

Tidak. Arrow function menangkap variabel luar sebagai nilai, jadi fn() => $count++ hanya mengubah salinannya sendiri dan $count di luar tetap sama. Untuk mengubah variabel dari luar, pakai closure dengan use (&$count).

Apa bedanya fn dan function di PHP?

fn($x) => ... berisi satu ekspresi, mengembalikannya secara implisit, dan menangkap setiap variabel luar yang dipakainya sebagai nilai. function ($x) use ($y) { ... } bisa berisi pernyataan apa pun, butuh return yang eksplisit, dan hanya melihat variabel yang ditulis di use, yang bisa ditangkap lewat referensi.

Ilustrasi bahasa pemrograman di Coddy

Belajar coding dengan Coddy

Mulai