Parameter opsional disediakan sebelum php yang diperlukan

Meskipun saya secara umum setuju bahwa itu kemungkinan adalah bug dalam kode baru, saya lebih suka mencela daripada memperingatkan atau bahkan kesalahan. perubahan akan membuat tidak mungkin untuk mempertahankan tipe tanpa peringatan sambil mempertahankan kompatibilitas dengan versi PHP lama dan membuat migrasi tambahan lebih sulit (maka tidak mungkin untuk menulis kode bebas peringatan yang berjalan pada 7. 0 dan 8. 0 pada saat yang sama sambil mempertahankan informasi jenis)

Informasi dapat diteruskan ke fungsi melalui daftar argumen, yang merupakan daftar ekspresi yang dibatasi koma. Argumen dievaluasi dari kiri ke kanan, sebelum fungsi benar-benar dipanggil (evaluasi bersemangat)

PHP mendukung lewat argumen dengan nilai (default), , dan. dan juga didukung

Contoh #1 Melewati array ke fungsi

function takes_array($input)
{
echo "$input[0] + $input[1] = ", $input[0]+$input[1];
}
?>

Mulai dari PHP 8. 0. 0, daftar argumen fungsi dapat menyertakan tanda koma, yang akan diabaikan. Itu sangat berguna dalam kasus di mana daftar argumen panjang atau berisi nama variabel yang panjang, membuatnya mudah untuk membuat daftar argumen secara vertikal

Contoh #2 Daftar Argumen Fungsi dengan koma di belakang

function takes_many_args(
$first_arg,
$second_arg,
$a_very_long_argument_name,
$arg_with_default = 5,
$again = 'a default string', // This trailing comma was not permitted before 8.0.0.
)
{
// ...
}
?>

Melewati argumen dengan referensi

Secara default, argumen fungsi diteruskan dengan nilai (sehingga jika nilai argumen di dalam fungsi diubah, nilai itu tidak berubah di luar fungsi). Untuk mengizinkan fungsi memodifikasi argumennya, mereka harus diteruskan dengan referensi

Agar argumen ke suatu fungsi selalu diteruskan dengan referensi, tambahkan ampersand (&) ke nama argumen dalam definisi fungsi

Contoh #3 Melewati parameter fungsi dengan referensi

function add_some_extra(&$string)
{
$string .= 'and something extra.';
}
$str = 'This is a string, ';
add_some_extra($str);
echo $str; // outputs 'This is a string, and something extra.'
?>

Merupakan kesalahan untuk memberikan nilai sebagai argumen yang seharusnya diteruskan dengan referensi

Nilai argumen default

Suatu fungsi dapat menentukan nilai default untuk argumen menggunakan sintaks yang mirip dengan menugaskan variabel. Standarnya hanya digunakan bila parameter tidak ditentukan;

Contoh #4 Penggunaan parameter default dalam fungsi

function makecoffee($type = "cappuccino")
{
return "Making a cup of $type.\n";
}
echo makecoffee();
echo makecoffee(null);
echo makecoffee("espresso");
?>

Contoh di atas akan ditampilkan

Making a cup of cappuccino.
Making a cup of .
Making a cup of espresso.

Nilai parameter default dapat berupa nilai skalar, array, tipe khusus null, dan pada PHP 8. 1. 0, objek menggunakan sintaks

Contoh #5 Menggunakan tipe non-skalar sebagai nilai default

Fatal error: Uncaught ArgumentCountError: Too few arguments
 to function makeyogurt(), 1 passed in example.php on line 42
_1

Contoh #6 Menggunakan objek sebagai nilai default (mulai dari PHP 8. 1. 0)

Fatal error: Uncaught ArgumentCountError: Too few arguments
 to function makeyogurt(), 1 passed in example.php on line 42
_2

Nilai default harus berupa ekspresi konstanta, bukan (misalnya) variabel, anggota kelas, atau pemanggilan fungsi

Perhatikan bahwa argumen opsional apa pun harus ditentukan setelah argumen apa pun yang diperlukan, jika tidak, argumen tersebut tidak dapat dihilangkan dari panggilan. Perhatikan contoh berikut

Contoh #7 Penggunaan argumen fungsi default yang salah

Fatal error: Uncaught ArgumentCountError: Too few arguments
 to function makeyogurt(), 1 passed in example.php on line 42
_3

Fatal error: Uncaught ArgumentCountError: Too few arguments
 to function makeyogurt(), 1 passed in example.php on line 42
_4

Contoh di atas akan ditampilkan

Fatal error: Uncaught ArgumentCountError: Too few arguments
 to function makeyogurt(), 1 passed in example.php on line 42
_

Sekarang, bandingkan di atas dengan ini

Contoh #8 Penggunaan argumen fungsi default yang benar

Fatal error: Uncaught ArgumentCountError: Too few arguments
 to function makeyogurt(), 1 passed in example.php on line 42
_5

Fatal error: Uncaught ArgumentCountError: Too few arguments
 to function makeyogurt(), 1 passed in example.php on line 42
_6

Contoh di atas akan ditampilkan

Making a bowl of raspberry yogurt.
_

Mulai dari PHP 8. 0. 0, dapat digunakan untuk melewatkan beberapa parameter opsional

Contoh #9 Penggunaan argumen fungsi default yang benar

Fatal error: Uncaught ArgumentCountError: Too few arguments
 to function makeyogurt(), 1 passed in example.php on line 42
_7

Fatal error: Uncaught ArgumentCountError: Too few arguments
 to function makeyogurt(), 1 passed in example.php on line 42
_8

Contoh di atas akan ditampilkan

Making a bowl of raspberry natural yogurt.

Mulai dari PHP 8. 0. 0, mendeklarasikan argumen wajib setelah argumen opsional tidak digunakan lagi. Ini umumnya dapat diatasi dengan membuang nilai default, karena tidak akan pernah digunakan. Satu pengecualian untuk aturan ini adalah argumen dalam bentuk

Fatal error: Uncaught ArgumentCountError: Too few arguments
 to function makeyogurt(), 1 passed in example.php on line 42
9, di mana null default membuat tipe tersebut secara implisit dapat dibatalkan. Penggunaan ini tetap diperbolehkan, meskipun disarankan untuk menggunakan yang eksplisit

Contoh #10 Mendeklarasikan argumen opsional setelah argumen wajib

Making a bowl of raspberry yogurt.
_1

Making a bowl of raspberry yogurt.
_2

Catatan. Mulai dari PHP7. 1. 0, menghilangkan parameter yang tidak menentukan default akan memunculkan ArgumentCountError;

Catatan. Argumen yang diteruskan oleh referensi mungkin memiliki nilai default

Daftar argumen dengan panjang variabel

PHP memiliki dukungan untuk daftar argumen panjang variabel dalam fungsi yang ditentukan pengguna dengan menggunakan token

Making a bowl of raspberry yogurt.
3

Catatan. Dimungkinkan juga untuk mencapai argumen panjang variabel dengan menggunakan fungsi func_num_args(), func_get_arg(), dan func_get_args(). Teknik ini tidak disarankan karena digunakan sebelum pengenalan token

Making a bowl of raspberry yogurt.
3

Daftar argumen dapat menyertakan token

Making a bowl of raspberry yogurt.
_3 untuk menunjukkan bahwa fungsi menerima sejumlah variabel argumen. Argumen akan diteruskan ke variabel yang diberikan sebagai array

Contoh #11 Menggunakan

Making a bowl of raspberry yogurt.
_3 untuk mengakses argumen variabel

Making a bowl of raspberry yogurt.
_7

Making a bowl of raspberry yogurt.
_8

Contoh di atas akan ditampilkan

Making a bowl of raspberry yogurt.
3 juga dapat digunakan saat memanggil fungsi untuk membongkar array atau variabel Traversable atau literal ke dalam daftar argumen

Contoh #12 Menggunakan

Making a bowl of raspberry yogurt.
_3 untuk memberikan argumen

Making a bowl of raspberry natural yogurt.
_1

Making a bowl of raspberry natural yogurt.
_2

Making a bowl of raspberry natural yogurt.
_3

Contoh di atas akan ditampilkan

Anda dapat menentukan argumen posisi normal sebelum

Making a bowl of raspberry yogurt.
3 token. Dalam hal ini, hanya argumen tambahan yang tidak cocok dengan argumen posisi yang akan ditambahkan ke larik yang dihasilkan oleh
Making a bowl of raspberry yogurt.
3

Dimungkinkan juga untuk menambahkan deklarasi tipe sebelum token

Making a bowl of raspberry yogurt.
3. Jika ini ada, maka semua argumen yang ditangkap oleh
Making a bowl of raspberry yogurt.
3 harus cocok dengan tipe parameter tersebut

Contoh #13 Ketik argumen variabel yang dideklarasikan

Making a bowl of raspberry natural yogurt.
_8

Making a bowl of raspberry natural yogurt.
_9

3 days
Catchable fatal error: Argument 2 passed to total_intervals() must be an instance of DateInterval, null given, called in - on line 14 and defined in - on line 2
_0

Contoh di atas akan ditampilkan

3 days
Catchable fatal error: Argument 2 passed to total_intervals() must be an instance of DateInterval, null given, called in - on line 14 and defined in - on line 2

Terakhir, argumen variabel juga dapat diteruskan dengan mengawali

Making a bowl of raspberry yogurt.
3 dengan ampersand (
3 days
Catchable fatal error: Argument 2 passed to total_intervals() must be an instance of DateInterval, null given, called in - on line 14 and defined in - on line 2
2)

PHP versi lama

Tidak diperlukan sintaks khusus untuk mencatat bahwa suatu fungsi adalah variadik;

Contoh pertama di atas akan diimplementasikan sebagai berikut di versi lama PHP

Contoh #14 Mengakses argumen variabel di versi PHP lama

3 days
Catchable fatal error: Argument 2 passed to total_intervals() must be an instance of DateInterval, null given, called in - on line 14 and defined in - on line 2
_3

Making a bowl of raspberry yogurt.
_8

Contoh di atas akan ditampilkan

Argumen bernama

PHP 8. 0. 0 memperkenalkan argumen bernama sebagai perpanjangan dari parameter posisi yang ada. Argumen bernama memungkinkan meneruskan argumen ke fungsi berdasarkan nama parameter, bukan posisi parameter. Ini membuat arti dari argumen mendokumentasikan diri sendiri, membuat argumen tidak bergantung pada urutan dan memungkinkan melewatkan nilai default secara sewenang-wenang

Argumen bernama dilewatkan dengan mengawali nilai dengan nama parameter diikuti dengan titik dua. Menggunakan kata kunci yang dicadangkan sebagai nama parameter diperbolehkan. Nama parameter harus berupa pengenal, menentukan secara dinamis tidak diperbolehkan

Contoh #15 Sintaks argumen bernama

3 days
Catchable fatal error: Argument 2 passed to total_intervals() must be an instance of DateInterval, null given, called in - on line 14 and defined in - on line 2
_5

3 days
Catchable fatal error: Argument 2 passed to total_intervals() must be an instance of DateInterval, null given, called in - on line 14 and defined in - on line 2
_6

Contoh #16 Argumen posisi versus argumen bernama

3 days
Catchable fatal error: Argument 2 passed to total_intervals() must be an instance of DateInterval, null given, called in - on line 14 and defined in - on line 2
_7

3 days
Catchable fatal error: Argument 2 passed to total_intervals() must be an instance of DateInterval, null given, called in - on line 14 and defined in - on line 2
_8

Urutan penyampaian argumen bernama tidak menjadi masalah

Contoh #17 Contoh yang sama seperti di atas dengan urutan parameter yang berbeda

3 days
Catchable fatal error: Argument 2 passed to total_intervals() must be an instance of DateInterval, null given, called in - on line 14 and defined in - on line 2
_9

Argumen bernama dapat digabungkan dengan argumen posisional. Dalam hal ini, argumen bernama harus muncul setelah argumen posisional. Dimungkinkan juga untuk menentukan hanya beberapa argumen opsional dari suatu fungsi, terlepas dari urutannya

Contoh #18 Menggabungkan argumen bernama dengan argumen posisi

function takes_array($input)
{
echo "$input[0] + $input[1] = ", $input[0]+$input[1];
}
?>
0

Meneruskan parameter yang sama beberapa kali akan menghasilkan pengecualian Error

Contoh #19 Error dilontarkan saat melewati parameter yang sama beberapa kali

function takes_array($input)
{
echo "$input[0] + $input[1] = ", $input[0]+$input[1];
}
?>
1

function takes_array($input)
{
echo "$input[0] + $input[1] = ", $input[0]+$input[1];
}
?>
2

Mulai dari PHP 8. 1. 0, dimungkinkan untuk menggunakan argumen bernama setelah membongkar argumen. Argumen bernama tidak boleh mengesampingkan argumen yang sudah dibongkar

Apakah parameter opsional merupakan praktik yang buruk?

Hal dengan parameter opsional adalah, mereka BURUK karena tidak intuitif - artinya mereka TIDAK berperilaku seperti yang Anda harapkan. Inilah alasannya. Mereka merusak kompatibilitas ABI. sehingga Anda dapat mengubah argumen default di satu tempat.

Apakah wajib menentukan nilai default ke parameter opsional?

Parameter opsional harus memberikan nilai default yang dapat digunakan jika tidak ada parameter yang disediakan oleh prosedur pemanggilan .

Bagaimana cara membuat parameter opsional di PHP?

Argumen yang tidak menghentikan fungsi bekerja meskipun tidak ada yang diteruskan disebut sebagai argumen opsional . Argumen yang kehadirannya sepenuhnya opsional, nilainya akan diambil oleh program jika disediakan.

Mengapa parameter opsional ditambahkan?

Tetapi menggunakan Parameter Opsional, Anda dapat menentukan nilai default . Jadi, setiap kali tidak ada nilai atau undefined yang diteruskan, nilai default akan diteruskan sebagai gantinya.