Tutorial Function Pada PHP
Anonymous dan Arrow Functions
Materi ini memiliki 1 buah lampiran. Namun Anda tidak dapat mengakses lampiran karena belum terdaftar di kursus ini. Klik disini untuk mendaftar.
Pada video ini kita akan belajar cara yang lebih ringkas untuk membuat function, tanpa perlu menyiapkan namanya, yaitu dengan cara membuat anonymous dan arrow function.
Kita mulai dari anonymous function terlebih dahulu ya. Anonymous ini berasal dari kata anonim, yang berarti tanpa nama. Jadi kalau kita menggunakan fitur ini, maka kita bisa membuat function yang tidak memiliki nama. Khusus untuk di bahasa pemograman PHP, Anonymous Function disebut juga dengan nama Closure. Apa kegunaan dari Anonymous Function? Nah, Anonymous Function ini biasanya digunakan untuk mengirimkan function sebagai argument pada function lainnya.
Ini adalah sintaks dari Anonymous Function. Perhatikan bahwa biasanya setelah kata kunci function kita menyebutkan nama function-nya. Namun disini kita tidak menggunakan nama sama sekali ya. Jadi kita langsung menggunakan tanda kurung dan menyebutkan apa saja parameter dari function tersebut. Kemudian kita beritahukan tipe data yang dikembalikan oleh function. Setelah itu seperti biasa kita menggunakan kurung kurawal dan menuliskan perintah-perintah yang dijalankan di dalam kurung kurawal.
Nah, di dalam contoh ini, anonymous function kita simpan ke dalam variable $hello. Jadi kedepannya kita bisa memanggil function tersebut dengan menyebutkan nama variable $hello, diikuti oleh tanda kurung dan argument-nya. Nah, berhubung PHP menggunakan tanda $ untuk nama variable-nya, jadi disini terasa bedanya ya. Kalau kita memanggil function biasa tidak menggunakan tanda $. Namun berhubung kita menjalankan function yang disimpan di dalam variable, maka kita menggunakan tanda dollar diikuti oleh nama variable-nya.
Kita langsung coba praktek. Kita coba dari cara function biasa dahulu ya. Misalkan kita buat function hello dengan parameter string $name dan mengembalikan hasil string. Di dalamnya, kita return “Hello $name\n”. Setelah function, kita tampilkan hasil dari function tersebut dengan cara echo hello(“Budi”). Kalau kita jalankan, maka keluar hasil “Hello Budi”.
function hello(string $name): string{ return "Hello $name\n"; } echo hello("Budi");
Oke. Ini adalah cara biasa ya. Sekarang kita coba cara anonymous function. Kita copy paste dahulu kode diatas. Kita komentari dahulu kode lama.
Kita ubah function baru menjadi anonymous ya. Agar function menjadi anonim, maka kita hapus namanya. Sekarang menjadi function tanpa nama. Namun untuk menggunakan function ini, kita harus menampungnya ke dalam variable. Jadi di depannya kita buat dahulu variable ya. Misalkan kita beri nama variable $myFunction.
Nah, untuk memanggil function tersebut, maka kita echo nama variablenya $myFunction, diikuti oleh tanda kurung dan argument-nya. Kalau kita coba jalankan, ternyata masih ada error ya. Karena anonymous function ini adalah sebuah ekspresi, dan kita harus memberikan tanda titik koma untuk menandakan bagian akhir dari ekspresinya. Berbeda dengan function biasa yang tidak perlu titik koma. Kita jalankan lagi dan kita mendapatkan hasil yang sama.
Selanjutnya, kalau misalkan kita tidak mau menggunakan $name sebagai variable. Melainkan kita akses variable $name yang berada di luar function. Apakah bisa? Kita coba dari function biasa dahulu ya. Kita hapus parameter $name. Lalu di sebelum function kita buat variable $name.
Kita jalankan. Ternyata function tidak mengenali variable $name, karena berada di luar function. Kalau teman-teman masih ingat, ada caranya ya. Kita harus deklarasikan dahulu bahwa kita menggunakan variable global $name. Barulah kode bisa berjalan dengan benar.
Sekarang kita coba di anonymous function. Kita hilangkan parameter $name. Lalu kita jadikan variable diluar function. Nah, untuk di anonymous function ini sintaksnya berbeda ya. Kita bukan menggunakan global, melainkan kita deklarasikan dengan menggunakan kata kunci use setelah tutup kurung parameter. Setelah use, kita buka kurung dan kita sebutkan nama-nama variable diluar function yang hendak kita gunakan. Disini kita tidak bisa menggunakan type declaration, jadi kita langsung menuliskan nama variable $name. Kalau kita jalankan, maka function menggunakan variable $name yang isinya ‘Budi’ dari luar function.
Yang menariknya disini adalah variable $name yang di dalam function ini hanya meng-copy nilai dari variable $name diluar function. Jadi kalau kita coba ubah nilai variable $name di dalam function menjadi ‘Skysen’, kemudian setelah memanggil function kita coba cetak nilai dari variable $name. Kita lihat hasilnya di dalam function, nilai $name adalah ‘Skysen’, sedangkan diluar function nilainya adalah ‘Budi’.
Yang lebih menariknya lagi, ternyata nilai dari variable di-copy pada saat deklarasi function. Kalau kita coba pindahkan ya, perubahan nilai variable $name dilakukan diluar function setelah deklarasi. Kita lihat hasilnya. Ternyata nilai $name di dalam function tetap ‘Budi’, karena nilai langsung di-copy pada saat pembuatan function. Kalau nilai variable diubah setelah pembuatan function, maka nilai di dalam function tidak berubah.
Apabila teman-teman ingin agar nilai di dalam function berubah mengikuti nilai variale diluar function, maka kita bisa menggunakan reference. Caranya kita tambahkan simbol & pada nama variable di dalam kata kunci use. Sekarang perubahan yang dilakukan diluar function turut merubah nilai $name di dalam function. Begitu juga kalau kita mengubah $name di dalam function, maka di luar function juga turut berubah.
Kalau kita coba var_dump variable $myFunction, maka kita mendapatkan tipe datanya adalah object Closure. PHP secara otomatis membuat Closure untuk menyimpan function ke dalam variable. Kalau kita sudah mengerti mengenai Object Oriented Programming, kita juga bisa melakukan modifikasi terhadap objek Closure ini. Namun saya tidak akan membahas lebih lanjut mengenai hal ini, karena pada dasarnya kita menggunakan Closure untuk mempermudah pekerjaan kita.
Kita lanjutkan materi kita ke Arrow Functions. Arrow Function adalah cara yang lebih singkat untuk membuat Anonymous Function. Jadi kedua cara ini sama-sama menghasilkan Closure. Namun bagi yang ingin menggunakan Arrow Function, perlu diingat bahwa cara ini baru diperkenalkan di PHP versi 7.4. Jadi kita harus menggunakan PHP versi 7.4 atau diatasnya. Kalau tidak, kita akan mendapatkan error karena sintaks ini masih belum dikenal oleh PHP.
Apa saja perbedaan antara Arrow Function dengan Anonymous Function? Arrow Function bisa secara otomatis menggunakan variable diluar function, tanpa perlu kita deklarasikan menggunakan kata kunci use. Namun kita hanya bisa menggunakan variable dengan cara value, tidak bisa menggunakan cara reference. Isi dari arrow function hanya bisa satu buah ekspresi. Jadi kode di dalam arrow function hanya bisa satu baris, dan harus langsung mengembalikan nilainya.
Ini adalah contoh dari sintaks Arrow Function. Mirip dengan Anonymous. Namun yang tadinya kita mesti menggunakan kata kunci function, sekarang dipersingkat menjadi fn. Kemudian kita tidak perlu menggunakan kata kunci use, dan tidak perlu menggunakan kurung kurawal dan kata kunci return. Kita hanya menuliskan anak panah menggunakan simbol sama dengan dan lebih besar. Lalu kita langsung menuliskan satu buah ekspresi yang akan dikembalikan ke luar function.
Kita coba praktek. Kita copy paste dari kode sebelumnya ya. Kita komentari kode lama. Nah, kode yang baru ini akan kita ubah menjadi Arrow Function. Pertama kita pindahkan dahulu statement yang mengubah nilai $name ke setelah function. Secara isi dari arrow function hanya boleh mengandung 1 buah ekspresi. Kemudian kita ubah kata kunci function menjadi fn. Kita hapus kata kunci use. Lalu kita hapus kurung kurawal dan kata kunci return, kita ganti menjadi simbol anak panah.
Kalau kita jalankan, hasilnya tetap sama dengan Anonymous Function ya. Nilai dari variable $name di dalam function di-copy pada saat pembuatan function. Sehingga perubahan $name setelah pembuatan function sudah tidak merubah nilai $name di dalam function. Hasil dari arrow function adalah ‘Hello Budi’, walaupun nilai variable $name di luar function telah berubah menjadi ‘Skysen’. Sedangkan tipe data dari arrow function adalah object Closure.
Disini kita masih menggunakan type declaration untuk return value-nya ya. Namun kalau kita ingin kodenya menjadi lebih singkat, maka type declarationnya bisa dihapus. Hasilnya tetap sama ya.
Pada awal video tadi saya mengatakan bahwa Anonymous Functions digunakan untuk mengirimkan function sebagai argument. Sekarang kita masuk ke cara implementasinya ya. Disini kita belajar tipe data baru, yaitu tipe data callable yang isinya adalah sebuah function.
Kita lihat ke contoh kodenya. Misalkan kita membuat sebuah function hello, dengan 2 buah parameter. Parameter pertama adalah nama yang hendak kita sapa. Sedangkan parameter kedua adalah function yang mengatur penggunaan huruf besar atau kecil pada kalimat sapaan kita. Untuk parameter kedua ini kita menggunakan tipe data callable.
Di dalam function, kita bisa menjalankan callable dengan memanggil fungsi call_user_func atau singkatan dari call user function. Argument pertama adalah nama function callable-nya, sedangkan argument kedua dan berikutnya adalah argument yang digunakan untuk memanggil function callbable.
Pada saat kita memanggil function hello, maka kita harus mengirimkan function sebagai argument kedua. Kita sudah belajar 3 cara untuk melakukan hal ini ya. Dimulai dari cara pertama yang diajarkan pada video sebelumnya, yaitu Variable Function. Dan cara kedua dan ketiga yang diajarkan pada video ini, yaitu Anonimous Function dan Arrow Function. Pada contoh di slide kita menggunakan cara Variable Function.
Seperti biasa kita langsung praktek. Kita buat dahulu function hello dengan parameter string $name dan callable $case. Pertama kita buat dahulu variable hasilnya, yang berisi ‘hello $name’ dan baris baru. Kemudian kita panggil echo, dan kita panggil function callable menggunakan call_user_function dengan argument $case dan $result. Di luar function, kita coba panggil hello dengan menggunakan argument ‘Budi’ dan ‘strtoupper’. Sebagai hasilnya kita mendapatkan ‘HELLO BUDI’ yang menggunakan huruf besar semua.
Nah, ini adalah cara pertama untuk menggunakan callable ya, yaitu menggunakan cara variable function. Selanjutnya kita coba ke cara kedua yaitu Anonymous Function untuk membuat fungsi baru yang menghasilkan Title Case. Kita panggil hello, dengan argument pertama ‘Budi’, kemudian argument keduanya adalah kata kunci function dengan parameter $name. Yang isinya mengembalikan ucwords(strtolower($name));.
hello('Budi', function($name){ return ucwords(strtolower($name)); });
Kalau kita jalankan, maka pemanggilan kedua menghasilkan ‘Hello Budi’ yang menggunakan Title Case.
Untuk cara ketiga, kita ubah Anonymous Function menjadi Arrow Function. Kita copy paste dahulu ya. Pertama kita ubah kata function menjadi fn. Lalu kita hapus kurung kurawal dan kata return. Diganti menjadi simbol anak panah. Kalau kita jalankan hasilnya tetap sama ya, hanya saja kodenya menjadi lebih singkat.
Kita lihat kembali ke dalam function hello ya. Kalau pada awal video, kita memanggil callable dengan cara menyebutkan nama variable-nya diikuti oleh tanda kurung. Sebenarnya sama saja ya. Jadi kalau echo kita komentari, lalu kita ganti menjadi echo $case($result). Hasilnya tetap sama. Disini kita hanya melihat alternatif, cara lain untuk menjalankan callable. Nantinya pada saat menuliskan kode, teman-teman boleh memilih cara mana yang lebih enak untuk digunakan.
Disini kita sudah melihat jelas cara menggunakan anonymous dan arrow function, tanpa menggunakan nama sama sekali. Jadi cara ini sebenarnya digunakan untuk mengirimkan function sebagai argument, dimana kita yakin function tersebut hanya digunakan satu kali saja sehingga kita tidak perlu repot memikirkan nama untuk menyimpan function tersebut. Kelemahannya adalah kita tidak bisa menggunakan ulang function tersebut. Namun kita mendapatkan kelebihan yaitu kita bisa lebih cepat dalam menciptakan function-nya, karena tanpa nama dan menggunakan sintaks yang lebih sederhana.
Dengan menggunakan fasilitas tanya jawab, maka Anda bisa bertanya dan akan dijawab langsung oleh instruktur kursus.
Anda belum terdaftar pada kursus ini sehingga tidak bisa mengajukan pertanyaan.