Bagaimana Anda membuat argumen opsional di php?

190

Dalam manual PHP, untuk menunjukkan sintaks untuk fungsi dengan parameter opsional, mereka menggunakan tanda kurung di sekitar setiap set parameter opsional yang bergantung. Misalnya, untuk date()fungsi, manual berbunyi:

string date ( string $format [, int $timestamp = time() ] )

Di mana $timestampparameter opsional, dan ketika dibiarkan kosong, defaultnya time()adalah nilai pengembalian fungsi.

Bagaimana Anda membuat parameter opsional seperti ini ketika mendefinisikan fungsi khusus di PHP?

huh
sumber

Jawaban:

253

Sama seperti manual, gunakan tanda equals ( =) dalam definisi Anda tentang parameter:

function dosomething($var1, $var2, $var3 = 'somevalue'){
    // Rest of function here...
}
Jeff Winkworth
sumber
function dosomething($var1, $var2, $optionalValue = null)Saya menemukan opsi yang lebih baik ini.
Mohammad Zaid Pathan
52

Nilai default argumen harus berupa ekspresi konstan. Itu tidak bisa variabel atau panggilan fungsi.

Namun, jika Anda memerlukan fungsi ini:

function foo($foo, $bar = false)
{
    if(!$bar)
    {
        $bar = $foo;
    }
}

Dengan asumsi $bartidak diharapkan menjadi boolean tentu saja.

Ross
sumber
1
namun, ini akan mengevaluasi apakah 0 atau "false" diteruskan ke $ bar.
Tyzoid
33
Null adalah standar yang jauh lebih baik.
Kzqai
3
@DoMMasteR, di sini, maksud Anda $bar === false- ini adalah tindakan yang harus dilakukan ketika $bartelah default false. Ini akan menghindari tindakan yang salah jika 0dilewatkan, sehingga berhasil - KECUALI a boolean diperlukan. Seperti yang dikatakan Kzqai, solusi yang lebih umum adalah menggunakan $bar = null, karena itu juga dapat digunakan ketika nilai $ bar adalah boolean. Tes kemudian menjadi if (is_null($bar))atau if ($bar === null).
ToolmakerSteve
22

Beberapa catatan yang juga bermanfaat bagi saya:

  • Pertahankan nilai default Anda di sisi kanan.

    function whatever($var1, $var2, $var3="constant", $var4="another")
  • Nilai default argumen harus berupa ekspresi konstan. Itu tidak bisa variabel atau panggilan fungsi.

huh
sumber
14

Berikan nilai opsional pada argumen opsional.

function date ($format, $timestamp='') {
}
mk.
sumber
10

Fungsi tanggal akan didefinisikan seperti ini:

function date($format, $timestamp = null)
{
    if ($timestamp === null) {
        $timestamp = time();
    }

    // Format the timestamp according to $format
}

Biasanya, Anda akan meletakkan nilai default seperti ini:

function foo($required, $optional = 42)
{
    // This function can be passed one or more arguments
}

Namun, hanya literal yang merupakan argumen default yang valid, itulah sebabnya saya digunakan nullsebagai argumen default pada contoh pertama, tidak $timestamp = time() , dan dikombinasikan dengan cek nol. Literal termasuk array ( array()atau []), boolean, angka, string, dan null.

Lars Gyrup Brink Nielsen
sumber
8

Jika Anda tidak tahu berapa banyak atribut yang harus diproses, Anda dapat menggunakan token daftar argumen variad ( ...) yang diperkenalkan dalam PHP 5.6 ( lihat dokumentasi lengkap di sini ).

Sintaksis:

function <functionName> ([<type> ]...<$paramName>) {}

Sebagai contoh:

function someVariadricFunc(...$arguments) {
  foreach ($arguments as $arg) {
    // do some stuff with $arg...
  }
}

someVariadricFunc();           // an empty array going to be passed
someVariadricFunc('apple');    // provides a one-element array
someVariadricFunc('apple', 'pear', 'orange', 'banana');

Seperti yang Anda lihat, token ini pada dasarnya mengubah semua parameter menjadi array, yang dapat Anda proses dengan cara apa pun yang Anda suka.

Gergely Lukacsy
sumber