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