Saya sepertinya ingat bahwa di PHP ada cara untuk melewatkan array sebagai daftar argumen untuk suatu fungsi, mendereferensi array ke dalam func($arg1, $arg2)
cara standar . Tapi sekarang saya bingung bagaimana melakukannya. Saya ingat cara melintas dengan referensi, cara "glob" parameter yang masuk ... tetapi tidak bagaimana untuk membatalkan daftar array ke dalam daftar argumen.
Mungkin sesederhana itu func(&$myArgs)
, tapi aku cukup yakin bukan. Tapi, sayangnya, panduan php.net belum membocorkan apa pun sejauh ini. Bukan berarti saya harus menggunakan fitur khusus ini selama setahun terakhir.
$args = [1,2,3]; function(...$args){}
callable
, yang menggunakan yang samacall_user_func_array
, hanya dengan array di mana elemen pertama adalah objek, dan yang kedua adalah metode. Misalnyacall_user_func_array([$object, 'method'], $myArgs);
Seperti yang telah disebutkan , pada PHP 5.6+ Anda dapat (harus!) Menggunakan
...
token (alias "operator percikan", bagian dari fungsionalitas fungsi variadik ) untuk dengan mudah memanggil suatu fungsi dengan sejumlah argumen:Catatan: item array dipetakan ke argumen dengan posisi mereka di dalam array, bukan kunci mereka.
Sesuai komentar CarlosCarucce , bentuk argumen membongkar ini adalah metode tercepat sejauh ini dalam semua kasus. Dalam beberapa perbandingan, ini lebih cepat 5x dari
call_user_func_array
.Ke samping
Karena saya pikir ini sangat berguna (meskipun tidak terkait langsung dengan pertanyaan): Anda dapat mengetikkan petunjuk parameter percikan operator dalam definisi fungsi Anda untuk memastikan semua nilai yang diteruskan cocok dengan jenis tertentu.
(Ingatlah bahwa melakukan ini HARUS menjadi yang terakhir parameter Anda tetapkan dan bahwa ia menggabungkan semua parameter yang dilewatkan ke fungsi ke dalam array.)
Ini bagus untuk memastikan array berisi item dari tipe tertentu:
sumber
call_user_func_array
. Jadi jika Anda menggunakan php 5.6+ saya akan merekomendasikan yang ini. Berikut ini adalah tes , yang dikutip dalam wiki php resmiPerhatikan juga bahwa jika Anda ingin menerapkan metode instance ke array, Anda harus meneruskan fungsi sebagai:
sumber
$foo->bar()
Contoh pada halaman tertaut menyarankan bahwa seharusnyaarray($instance, "MethodName")
.call_user_func_array(array(parent, "__construct"), func_get_args());
Demi kelengkapan, pada PHP 5.1 ini juga berfungsi:
Lihat: http://php.net/reflectionfunction.invokeargs
Untuk metode yang Anda gunakan ReflectionMethod :: invokeArgs sebagai gantinya dan meneruskan objek sebagai parameter pertama.
sumber