Saya telah menulis fungsi PHP yang dapat menerima 10 parameter, tetapi hanya 2 yang diperlukan. Kadang-kadang, saya ingin menentukan parameter kedelapan, tetapi saya tidak ingin mengetikkan string kosong untuk setiap parameter sampai saya mencapai yang kedelapan.
Satu ide yang saya miliki adalah meneruskan fungsi yang diabstraksi dengan berbagai parameter yang meneruskannya ke fungsi sebenarnya.
Apakah ada cara yang lebih baik untuk mengatur fungsi sehingga saya hanya dapat mengirimkan parameter yang saya inginkan?
php
function
parameter-passing
pengguna481826
sumber
sumber
Jawaban:
Buat fungsi tersebut mengambil satu parameter: sebuah array. Meneruskan parameter aktual sebagai nilai dalam larik.
Sunting: tautan di komentar Pekka hampir merangkumnya.
sumber
Apa yang telah saya lakukan dalam hal ini adalah melewatkan array, di mana kuncinya adalah nama parameter, dan nilainya adalah nilainya.
sumber
Untuk mencapai apa yang Anda inginkan, gunakan larik Seperti yang dikatakan Rabbot (meskipun ini bisa menyusahkan untuk didokumentasikan / dipelihara jika digunakan secara berlebihan). Atau gunakan saja argumen opsional tradisional.
Namun, saya biasanya menemukan bahwa ketika saya mulai menulis fungsi / metode dengan banyak argumen - lebih sering daripada tidak itu adalah bau kode, dan dapat difaktorkan ulang / disarikan menjadi sesuatu yang jauh lebih bersih.
sumber
Di PHP 5.6 dan yang lebih baru, daftar argumen mungkin menyertakan ... token untuk menunjukkan bahwa fungsi tersebut menerima sejumlah variabel argumen. Argumen akan diteruskan ke variabel yang diberikan sebagai array; sebagai contoh:
Contoh Menggunakan ... untuk mengakses argumen variabel
Contoh di atas akan menampilkan:
Argumen panjang variabel mencantumkan Dokumentasi PHP
sumber
Anda bisa menyetel nilai default ke null.
sumber
null
dengan non-bit pada tipe tanggal. misalnyaarray()
untuk arrayCATATAN: Ini adalah jawaban lama, untuk PHP 5.5 dan di bawahnya. PHP 5.6+ mendukung argumen default
Di PHP 5.5 dan yang lebih lama, Anda dapat mencapai ini dengan menggunakan salah satu dari 2 metode berikut:
Cara Penggunaan
Saya lebih suka metode kedua karena bersih dan mudah dimengerti, tetapi terkadang Anda mungkin memerlukan metode pertama.
sumber
$x = null; if ($x) echo "true"; else echo "false";
akan mencetak "false", meskipun $ x var memiliki nilai ("null" dalam kode ini). Juga, di kedua metode kami menggunakan operator terner, jadi gunakanlah satu "=" yang benar. Jika Anda menguji denganmethod(); method(1); method(1, 2);
, maka panggilan pertama akan mengaitkan arg1 dan arg2 dengan nilai default, panggilan kedua akan mengaitkan argumen kedua dengan nilai default dan "1" untuk argumen pertama. Panggilan terakhir tidak akan mengasosiasikan nilai default.Saya rasa, Anda juga bisa menggunakan objek sebagai params-transportes.
Tentu saja, Anda harus menetapkan nilai default untuk "optParam8" dan "optParam2" dalam fungsi ini, dalam kasus lain Anda akan mendapatkan "Pemberitahuan: Properti yang tidak ditentukan: stdClass :: $ optParam2"
Jika menggunakan array sebagai parameter fungsi, saya suka cara ini untuk mengatur nilai default:
sumber
Jika hanya dua nilai yang diperlukan untuk membuat objek dengan status yang valid, Anda dapat dengan mudah menghapus semua argumen opsional lainnya dan menyediakan setter untuk mereka (kecuali Anda tidak ingin mereka berubah saat runtime). Kemudian buat instance objek dengan dua argumen yang diperlukan dan setel yang lain sesuai kebutuhan melalui penyetel.
Bacaan lebih lanjut
sumber
Saya tahu ini adalah posting lama, tetapi saya mengalami masalah seperti OP dan inilah yang saya temukan.
Contoh larik yang bisa Anda lewati. Anda dapat memesan ulang ini jika pesanan tertentu diperlukan, tetapi untuk pertanyaan ini ini akan melakukan apa yang diminta.
Ini dapat dikelola, mudah dibaca dan titik ekstraksi data dapat ditambahkan dan dihapus pada saat-saat tertentu di mana saja dalam pengkodean dan masih menghindari penulisan ulang besar-besaran. Saya menggunakan kunci integer untuk menghitung dengan pertanyaan asli OP tetapi kunci string dapat digunakan dengan mudah. Bahkan untuk keterbacaan saya akan menyarankannya.
Tempelkan ini di file eksternal untuk kemudahan
letakkan ini di awal jika file tersebut.
Cukup gunakan ini untuk menetapkan bagian data berikutnya menggunakan penomoran / penamaan sesuai dengan dari mana data itu berasal.
Dan akhirnya lewati array
sumber
Anda dapat membuat fungsi biasa dan kemudian menambahkan variabel opsional Anda dengan memberinya nilai Null default.
Null tetap sebuah nilai, jika Anda tidak memanggil fungsi dengan nilai untuk variabel itu, tidak akan kosong jadi tidak ada kesalahan.
sumber
Jika Anda biasanya hanya meneruskan nilai ke-8, Anda dapat menyusun ulang parameter Anda menjadi yang pertama. Anda hanya perlu menentukan parameter sampai yang terakhir ingin Anda setel.
Jika Anda menggunakan nilai yang berbeda, Anda memiliki 2 opsi.
Salah satunya adalah membuat satu set fungsi pembungkus yang mengambil parameter berbeda dan menetapkan default pada yang lain. Ini berguna jika Anda hanya menggunakan sedikit kombinasi, tetapi dapat menjadi sangat berantakan dengan cepat.
Opsi lainnya adalah melewatkan array di mana kuncinya adalah nama parameter. Anda kemudian dapat memeriksa apakah ada nilai dalam array dengan kunci, dan jika tidak menggunakan default. Tetapi sekali lagi, ini bisa menjadi berantakan dan menambahkan banyak kode tambahan jika Anda memiliki banyak parameter.
sumber
PHP memungkinkan argumen default ( tautan ). Dalam kasus Anda, Anda dapat mendefinisikan semua parameter dari 3 sampai 8 sebagai NULL atau sebagai string kosong "" tergantung pada kode fungsi Anda. Dengan cara ini, Anda dapat memanggil fungsi hanya menggunakan dua parameter pertama.
Sebagai contoh:
sumber
echo " this is arg3: " . $arg3;
, dll., Anda akan melihat bahwa pemanggilan egyourFunction(3, 2, $arg8=5);
akan dicetak32 this is arg3: 5
. Masalahnya adalah bahwa posisi parameter masih penting ketika meneruskan parameter opsional dalam PHP ... nama parameter tidak cukup untuk memetakan nilai parameter ke nama parameter.Setel Null untuk mengabaikan parameter yang tidak ingin Anda gunakan, lalu setel parameter yang diperlukan sesuai posisinya.
sumber
sumber
default
adalah kata kunci dalam PHP .