Saya pernah berdebat filosofis semacam ini dengan diri saya sendiri sebelumnya. Di sinilah saya berdiri sebagian besar waktu meskipun saya menyadari ini adalah jawaban berdasarkan pendapat:
Satu hal yang saya lihat yang mungkin dapat membantu menjawab pertanyaan ini adalah meloloskan $ params yang mungkin atau mungkin tidak memiliki atribut / susunan anggota yang ditetapkan.
Selama bertahun-tahun saya sampai pada kesimpulan ini:
Hindari berlalunya array.
Mengapa? Yah, tidak ada cara untuk menetapkan atau memiliki nilai sentinel yang ditentukan untuk argumen yang diteruskan opsional.
Dengan kata lain, dengan kode yang Anda tentukan, Anda tidak dapat melakukan sesuatu seperti ini:
function __construct($arg1 = NULL, $arg2 = DEFAULT_VAL) {
$this->arg1 = $arg1;
$this->arg2 = $arg2;
}
$ arg1 dan $ arg2 adalah argumen opsional - jika tidak lulus, masing-masing memiliki NULL dan DEFAULT_VAL - tidak perlu memeriksa secara eksplisit.
Mungkin ini agak sewenang-wenang.
Saya pikir saya mendapatkan apa yang Anda coba capai - lewat satu referensi sebagai lawan dari banyak argumen. Ini membawa saya ke kesimpulan saya berikutnya:
Jika tidak melewati variabel "atom" (string, integer, literal), maka meneruskan objek.
Ada manfaat kinerja di sini karena benda lewat dilakukan dengan referensi (meskipun array saya pikir kira-kira sama di dalam PHP).
Jadi, Anda mungkin melakukan sesuatu seperti:
function __construct(MyAwesomeObject $oArg) {
$this->oArg = $oArg;
}
Argumen objek yang diteruskan akan dijamin memiliki "property1", "property2" walaupun mungkin dengan nilai default sendiri.
Selain itu, di sini Anda dapat mengetikkan petunjuk dan IDE yang bagus akan secara otomatis mengisyaratkan penyelesaian kode juga.
Tapi kami segera menyadari bahwa kami memiliki ayam dan telur yang sedang terjadi: Anda membangun sebuah objek dengan argumen objek yang berlalu yang mereka sendiri butuhkan untuk membangun di beberapa titik.
Jadi bagaimana kita meninggalkan ini? Yah, saya sampai pada kesimpulan bahwa akhirnya semua kelas menyaring, karena tidak ada istilah yang lebih baik, "atom" variabel (string, float, double, ints, sumber daya yang Anda dapatkan poin saya), dan bahwa saya cenderung untuk mencoba untuk membangun semua kelas dengan tipe variabel atau objek - tetapi tidak array.
Jadi, apakah saya menjawab pertanyaan Anda? mungkin tidak tepat. Tapi saya harap saya mengilustrasikan sesuatu yang bermanfaat walaupun agak bergaya. Saya pikir kode ini sedikit lebih bersih, lebih mudah dibaca, dan lebih murah.
Sekarang, ini bukan untuk mengatakan Anda tidak harus membersihkan input Anda. Itu diskusi lain sepenuhnya.
Semoga ini membantu.
new object($param1,-some default value so I can specify the next parameter-, $param3);
dan Anda memiliki nilai default Anda dikodekan di beberapa tempat yang berbeda