Kodealgo

Function Arguments PHP

Argumen merupakan informasi yang diteruskan ke fungsi untuk diolah dibadan fungsi, argumen dapat berupa ekspresi atau nilai tunggal. Di PHP, argumen fungsi akan dievaluasi dari kiri ke kanan sebelum fungsi benar-benar dipanggil (eager evaluation).

Kita dapat meneruskan lebih dari satu argumen sesuai dengan jumlah argumen yang diharapkan oleh fungsi yang akan gunakan, dimana setiap argumen dipisahkan dengan koma dan harus berurutan.

Pada kesempatan kali ini kita akan membahas beberapa topik terkait function arguments di PHP, seperti argumen bernama (named argument), nilai default argument, melewatkan nilai argumen berdasarkan referensi dan sebagainya. Berikut beberapa topik yang akan kita bahas terkait argumen.

  1. Menggunakan Beberapa Argumen
  2. Argumen dengan Referensi
  3. Nilai Default Argumen
  4. Variable-length Argument List
  5. Argumen Bernama

Menggunakan Beberapa Argumen

Kita dapat meneruskan beberapa argumen atau nilai ke fungsi PHP, dimana setiap argumen dipisahkan dengan koma, dan nilainya dapat berupa tipe data apa pun termasuk tipe scalar maupun compound.

Yang perlu diperhatikan disini adalah urutannya, jika kita ingin meneruskan nilai untuk argumen pertama kita juga harus meneruskan nilai tersebut diposisi pertama saat memanggil fungsi.

Mari kita gunakan contoh dibawah, misalnya kita ingin meneruskan variabel $nama dan $umur ke fungsi sayHi, tapi saat memanggil fungsi kita meneruskan nilai untuk umur di posisi pertama dan nama di posisi ke dua.

Fungsi sayHi akan menganggap argumen pertama adalah nilai untuk $nama dan $umur untuk argumen kedua, oleh karena itu fungsi ini mencetak pesan yang salah meskipun kita menggunakan nama variabel yang sama dengan nama argumen yang diharapkan fungsi tersebut.

Jadi, pastikan urutan argumen yang kita teruskan saat memanggil fungsi sesuai dengan urutan argumen yang diharapkan fungsi tersebut, gunakan urutan argumen sebagai patokan bukan nama argumen.

function sayHi($nama, $umur)
{
  return "Hi, nama saya $nama, saya berusia $umur.";
}

$nama = 'Budi';
$umur = 20;

var_dump(sayHi($umur, $nama)); // string(36) "Hi, nama saya 20, saya berusia Budi."

Argumen dengan Referensi

Secara default, argumen fungsi diteruskan berdasarkan nilai (pass by value), sehingga jika nilainya diubah di dalam fungsi, nilai terbut tidak akan berubah diluar fungsi.

Untuk menizinkan suatu fungsi memodifikasi argumennya, argumen tersebut harus diteruskan sebagai referensi (pass by reference), kita dapat menambahkan tanda & sebelum nama argumen.

Contoh:

function testRef(&$nama)
{
  $nama = 'bambang';
}

$nama = 'budi';

testRef($nama);

var_dump($nama); // string(7) "bambang"

Perhatikan contoh diatas, kita mengubah argumen nama di dalam badan fungsi dan perubahan ini juga tercermin diluar fungsi.

Mari kita banding dengan argumen yang diteruskan sebagai nilai (pass by value), sekarang variabel $nama tetap berisi string budi tidak berubah, perubahan nilai yang dilakukan di dalam badan fungsi hanya berlaku di dalam badan fungsi.

function testRef($nama)
{
  $nama = 'bambang';
}

$nama = 'budi';

testRef($nama);

var_dump($nama); // string(4) "budi"

Nilai Default Argumen

Saat kita memanggil fungsi yang mengharapkan argumen, kita harus meneruskan nilai untuk argumen tersebut, jika tidak maka akan melemparkan kesalahan.

Jika kita menggunakan nilai default argumen, ketika kita memanggil fungsi dan tidak meneruskan nilai untuk argumen yang memiliki nilai default maka nilai default tersebut akan digunakan, contoh:

function sayHi($nama = 'Unknown')
{
  return "Hi, $nama.";
}

var_dump(sayHi()); // string(12) "Hi, Unknown."
var_dump(sayHi('Budi')); // string(9) "Hi, Budi."

Yang perlu diperhatikan di sini, jika kita memiliki beberapa argumen yang memiliki nilai default dan tidak memiliki nilai default, pastikan untuk menempatkan argumen dengan nilai default di posisi terakhir.

Variable-length Argument Lists

PHP mendukung variable-length argument lists yang menjunjukkan bahwa fungsi menerima sejumlah variabel argumen, fitur ini mirip dengan reset parameters di JavaScript.

Untuk menggunakan fitur ini, kita bisa menggunakan satu buah argumen fungsi yang namanya diawali dengan titik tiga (...$namaArgumen), argumen ini akan menjadi tipe array yang berisi nilai-nilai yang diteruskan saat memanggil fungsi.

Mari kita lihat contoh berikut.

function sum(...$numbers)
{
  var_dump($numbers);
  // array(5) {
  //   [0]=>
  //   int(1)
  //   [1]=>
  //   int(2)
  //   [2]=>
  //   int(3)
  //   [3]=>
  //   int(4)
  //   [4]=>
  //   int(5)
  // }

  $result = 0;

  foreach ($numbers as $number) {
    $result += $number;
  }

  return $result;
}

var_dump(sum(1, 2, 3, 4, 5)); // int(15)

Argumen Bernama

Argumen bernama memungkinkan kita meneruskan argumen ke fungsi berdasarkan nama parameter, bukan posisi parameter seperti contoh pertama di atas.

Dengan kata lain, dengan argumen bernama kita dapat meneruskan nilai tidak harus berurutan saat memanggil fungsi.

Untuk menggunakna argumen bernama, kita perlu menulis nama argumen diikuti dengan titik dua dan nilainya (namaArgumen: nilai).

Mari kita lihat contoh dibawah, fungsi sayHi memiliki dua argumen yaitu $nama di posisi pertama dan $umur kedua. Karena kita menggunakan argumen bernama kita dapat menempatkan nilai untuk argumen umur di posisi pertama dan nama di posisi terakhir.

Tapi kita perlu menulis nama argumen diikuti dengan titik dua dan nilainya.

function sayHi($nama, $umur)
{
  return "Hi, nama saya $nama. Saya berumur $umur tahun.";
}

var_dump(sayHi(umur: 20, nama: 'ucup')); // string(42) "Hi, nama saya ucup. Saya berumur 20 tahun."