Kodealgo

Function PHP

Function atau fungsi di PHP merupakan modul kode mandiri yang menyelesaikan tugas tertentu, biasanya mengambil data (input), memprosesnya, dan mengembalikan hasilnya (output). Fungsi yang telah dibuat dapat digunakan atau dipanggil berulang kali.

Fungsi yang kita buas sendiri disebut user-defined function, sedangkan fungsi yang sudah disediakan oleh PHP disebut internal function atau built-in function seperti str_replace, array_filter dan sebagainya.

Berikut beberapa topik yang akan kita bahas terkait fungsi PHP.

  1. Sintaks
  2. Membuat dan Memanggil Fungsi
  3. Argumen Fungsi
  4. Fungsi yang Mengembalikan Nilai
  5. Variable Function
  6. Anonymous Function
  7. Arrow Function

Sintaks

Sintaks fungsi mirip seperti bahasa pemrograman yang lainnya, berikut sintaks fungsi di PHP.

function namaFungsi(argumen)
{
  badanFungsi
}

Penjelasan

  • namaFungsi - nama yang akan kita berikan ke fungsi yang kita buat.
  • argumen - argumen merupakan nilai atau informasi yang diteruskan ke fungsi, nilai ini biasanya akan diproses di dalam badanFungsi.
  • badanFungsi - badan fungsi adalah kode yang ada diantara kurung kurawal buka dan tutup { ... }, disini kita dapat menulis logika atau program yang akan dieksekusi ketika fungsi dipanggil.

Membuat dan Memanggil Fungsi

Untuk membuat fungsi di PHP kita bisa menggunakna sintaks yang sudah dijelaskan diatas.

Mari kita gunakan contoh, katakanlah kita ingin membuat fungsi bernama getBio yang tugasnya merangkai sebuah string tentang perkenalan biografi singkat.

Fungsi ini akan mengambil tiga argumen, yaitu $firstName, $lastName, dan $profession, untuk membuat string perkenalan singkat kita akan merangkai ketiga nilai argumen tersebut agar menjadi sebuah kalimat perkenalan. Mari kita buat fungsi tersebut.

function getBio($firstName, $lastName, $profession)
{
  return "Hi, nama saya $firstName $lastName. Saya adalah seorang $profession.";
}

Diatas kita baru saja membuat fungsi, jika kita menjalankan interpreter PHP, kode diatas tidak akan melakukan apa pun karena kita baru saja membuat fungsi, belum menggunakan atau memanggilnya.

Untuk memanggil fungsi diatas, kita cukup menggunakan nama fungsi yang ingin dipanggil diikuti dengan tanda kurung yang berisi nilai dari argumen yang dibutuhkan oleh fungsi tersebut.

Dalam contoh dibawah, bagian ini getBio("Bambang", "Surambang", "Web Developer"); bertugas untuk memanggil fungsi dimana "Bambang" akan diteruskan sebagai argumen $fisrtName, "Surambang" sebagai $lastName, dan "Web Developer" sebagai $profession. Nilai yang dikembalikan oleh fungsi getBio kita tampung ke dalam variabel $bio.

$bio = getBio("Bambang", "Surambang", "Web Developer");

var_dump($bio);
// string(66) "Hi, nama saya Bambang Surambang. Saya adalah seorang Web Developer."

Argumen Fungsi

Argumen (kadang juga disebut parameter) adalah nilai atau informasi yang diteruskan ke fungsi untuk diolah didalam badan fungsi, argumen bersifat opsional dan jumlahnya tak terbatas, jika lebih dari satu, argumen harus dipisahkan dengan koma.

Jika fungsi membutuhkan argumen, tapi kita tidak meneruskan nilai untuk argumen tersebut saat memanggil fungsi, maka ini akan mengembalikan kesalahan. Mari kita buktikan.

function sayHi($name)
{
  return "Hi, $name.";
}

$hiBudi = sayHi(); // PHP Fatal error:  Uncaught ArgumentCountError ...

var_dump($hiBudi);

Fungsi sayHi membutuhkan satu argumen, tapi kita tidak meneruskan nilai untuk argumen tersebut saat memanggil fungsi, oleh karena itu kode diatas akan melemparkan kesalah PHP Fatal error ....

Bagaimana jika kita ingin agar ketika fungsi dipanggil tanpa nilai argumen, fungsi tersebut tidak mengembalikan kesalahan? Kita bisa menggunakan default argument atau nilai default untuk argumen ketika nilai tidak diteruskan saat dipanggil.

function sayHi($name = "Kamu")
{
  return "Hi, $name.";
}

$hi = sayHi();
$hiBudi = sayHi("Budi");

var_dump($hi); // string(9) "Hi, Kamu."
var_dump($hiBudi); // string(9) "Hi, Budi."

Perhatikan kode diatas, kita menggunakan "Kamu" sebagai nilai default untuk argumen $name ($name = "Kamu").

Ketika fungsi dipanggil tanpa nilai argumen (sayHi()), fungsi ini akan menggunakan nilai defaultnya, sedangkan ketika kita memanggilnya dengan nilai (sayHi("Budi")) fungsi tersebut akan menggunakan nilai yang kita diteruskan bukan nilai default.

Fungsi yang Mengembalikan Nilai

Sebuah fungsi tidak harus mengembalikan nilai, mereka dapat mengembalikan nilai atau tidak. Meskipun demikian, fungsi di PHP sebetulnya selalu mengembalikan nilai.

Jika kita membuat fungsi yang mengembalikan nilai secara eksplisit menggunakan kata kunci return, nilai yang dikembalikan adalah nilai yang sesuai dengan ekspresi yang ditulis setelah kata kunci return.

Contoh.

function getTwo()
{
  return 2;
}

var_dump(getTwo()); // int(2)

Tapi, jika fungsi tidak mengembalikan nilai, maka nilai null akan dikembalikan. Mari kita buktikan.

function sayHi()
{

}

var_dump(sayHi()); // null

Contoh diatas, kita membuat fungsi sayHi yang tidak mengembalikan nilai apa pun, tapi dibelakang layar, fungsi tersebut sebetulnya mengembalikan nilai null.

Fungsi yang memiliki kata kunci return di dalam badan fungsi belum tentu selalu mengembalikan nilai, jika kata kunci return berada dalam blok percabangan maka ada kemungkinan fungsi tersebut juga tidak mengembalikan nilai atau mengembalikan nilai null.

Mari kita coba.

function getReturn($shouldReturn = false)
{
  if($shouldReturn) {
    return "Hi";
  }
}

var_dump(getReturn()); // NULL
var_dump(getReturn(true)); // string(2) "Hi"

Variable Function

PHP mendukung konsep fungsi variabel atau variable function dimana kita dapat menjadikan sebuah variabel menjadi fungsi.

Untuk menggunakan fitur ini, kita bisa menginisialisasi variabel dengan nilai string, dimana string tersebut adalah nama dari fungsi yang akan kita tetapkan ke variabel tersebut.

Mari kita lihat contoh dibawah.

function sayHi($name)
{
  return "Hi, $name.";
}

$hi = 'sayHi';

var_dump($hi); // string(5) "sayHi"
var_dump($hi("Reza")); // string(9) "Hi, Reza."

Di atas, kita membuat variabel $hi dengan nilai string sayHi dimana string tersebut adalah nama fungsi yang telah kita buat diatasnya.

Variabel $hi sekarang memiliki dua perilaku, jika kita memanggil variabel tersebut tanpa tanda kurung maka nilainya adalah string yang kita berikan yaitu 'sayHi'.

Tapi, jika kita memanggilnya menggunakan kurung, seperti memanggil fungsi pada umumnya, maka variabel $hi akan bertindak sebagai fungsi ($hi("Reza")).

Anonymous Function

Fungsi anonom atau anonymous function juga dikenal sebagai closures adalah fitur yang memungkinkan kita membuat fungsi tanpa nama. Fungsi yang satu ini biasanya digunakan ketika nilai dari sebuah fungsi membutuhkan parameter berupa callabel atau callback.

Misalnya, saat kita menggunakan array_filter dimana parameter kedua dari fungsi ini harus callback atau callable, contoh.

$numbers = [1, 2, 3, 4, 5];

$numbersEven = array_filter($numbers, function ($number) {
  return $number % 2 === 0;
});

Perhatikan fungsi pada parameter kedua dalam fungsi array_filter pada contoh kode di atas, fungsi yang kita tulis adalah anonymous function karena fungsi tersebut tidak memiliki nama.

Fungsi tanpa nama juga dapat ditugaskan ke variabel, mari kita modifikasi contoh kode diatas agar berperilaku sama tapi kita menggunakan fungsi tanpa nama yang ditugaskan ke variabel $isEven.

$numbers = [1, 2, 3, 4, 5];

$isEven = function ($number) {
  return $number % 2 === 0;
};

$numbersEven = array_filter($numbers, $isEven);

Arrow Function

Fungsi panah atau arrow function memiliki perilaku yang mirip dengan fungsi tanpa nama, hanya saja fungsi panah hanya bisa digunakan untuk fungsi yang sederhana dimana fungsi ini biasanya digunakan ketika badan fungsi hanya berisi satu baris kode atau langsung mengembalikan ekspresi.

Sintaks

fn (argumen) => ekspresi
  • fn - kata kunci untuk membuat fungsi panah.
  • argumen - argumen yang akan diteruskan ke fungsi tersebut.
  • ekspresi - ekspresi atau nilai yang dikembalikan.

Contoh berikut kita membuat fungsi panah yang berfungsi untuk mengecek apakah sebuah nilai bilangan genap atau bukan, jika ya kembalikan true, jika bukan kembalikan false.

$isEven = fn ($number) => $number % 2 === 0;

var_dump($isEven(2)); // bool(true)
var_dump($isEven(1)); // bool(false)