Saya memiliki fungsi PHP yang mengambil sejumlah variabel argumen (menggunakan func_num_args()
dan func_get_args()
), tetapi jumlah argumen yang ingin saya sampaikan fungsi tersebut tergantung pada panjang array. Apakah ada cara untuk memanggil fungsi PHP dengan sejumlah variabel argumen?
php
variadic-functions
nohat
sumber
sumber
Jawaban:
Jika Anda memiliki argumen dalam array, Anda mungkin tertarik dengan
call_user_func_array
fungsinya.Jika jumlah argumen yang ingin Anda sampaikan bergantung pada panjang array, itu mungkin berarti Anda dapat mengemasnya ke dalam array sendiri - dan menggunakannya untuk parameter kedua
call_user_func_array
.Elemen dari larik yang Anda lewati kemudian akan diterima oleh fungsi Anda sebagai parameter yang berbeda.
Misalnya, jika Anda memiliki fungsi ini:
Anda dapat mengemas parameter Anda ke dalam array, seperti ini:
Dan, kemudian, panggil fungsinya:
Kode ini akan menghasilkan:
yaitu, 3 parameter; persis seperti iof fungsinya disebut seperti ini:
sumber
Ini sekarang dimungkinkan dengan PHP 5.6.x , menggunakan operator ... (juga dikenal sebagai operator percikan dalam beberapa bahasa):
Contoh:
sumber
Di Php 5.6 baru , Anda dapat menggunakan
... operator
daripada menggunakanfunc_get_args()
.Jadi, dengan menggunakan ini, Anda bisa mendapatkan semua parameter yang Anda berikan:
sumber
Sejak PHP 5.6 , daftar argumen variabel dapat ditentukan dengan
...
operator.Seperti yang Anda lihat,
...
operator mengumpulkan daftar variabel argumen dalam sebuah array.Jika Anda perlu meneruskan argumen variabel ke fungsi lain, itu
...
masih bisa membantu Anda.Sejak PHP 7 , daftar variabel argumen dapat dipaksa menjadi semua tipe yang sama juga.
sumber
Bagi mereka yang mencari cara untuk melakukan ini dengan
$object->method
:Saya berhasil dengan ini dalam fungsi konstruksi yang memanggil nama_metode variabel dengan parameter variabel.
sumber
$object->method_name(...$array);
$object->method_name(&...$args);
Anda bisa menyebutnya begitu saja.
Keluaran:
Larik ([0] => blah) Array ([0] => blah [1] => blah)
sumber
Saya terkejut tidak ada orang di sini yang menyebutkan hanya melewatkan dan mengekstrak sebuah array. Misalnya:
Tentu saja, ini tidak memberikan validasi argumen . Untuk itu, siapa pun dapat menggunakan fungsi harapan saya: https://gist.github.com/iautomation/8063fc78e9508ed427d5
sumber
Sebuah pertanyaan lama, saya tahu, bagaimanapun, tidak ada jawaban di sini yang benar-benar berfungsi dengan baik hanya dengan menjawab pertanyaan itu.
Saya baru saja bermain-main dengan php dan solusinya terlihat seperti ini:
Fungsi ini dapat melakukan dua hal:
Jika dipanggil dengan hanya parameter yang diperlukan:
myFunction("Hi")
Ini akan mencetak "Hi default"Tetapi jika dipanggil dengan parameter opsional:
myFunction("Hi","me")
Ini akan mencetak "Hai saya";Saya harap ini membantu siapa saja yang mencari ini di masa mendatang.
sumber
Berikut adalah solusi menggunakan metode ajaib __invoke
(Tersedia sejak php 5.3)
Dari dalam kelas yang sama:
Dari sebuah contoh objek:
sumber
call_user_func_array
seperti yang dinyatakan oleh jawaban pilihan teratas pada tahun 2009. Mungkin ada gunanya membungkus tambahan__invoke
di sekitarnya - tapi saya tidak melihatnya.