Saya memiliki fungsi yang mengambil set parameter, kemudian berlaku untuk mereka sebagai syarat untuk query SQL. Namun, sementara saya memilih array argumen tunggal yang berisi kondisi itu sendiri:
function searchQuery($params = array()) {
foreach($params as $param => $value) {
switch ($param) {
case 'name':
$query->where('name', $value);
break;
case 'phone':
$query->join('phone');
$query->where('phone', $value);
break;
}
}
}
Rekan saya lebih suka mendaftarkan semua argumen secara eksplisit sebagai gantinya:
function searchQuery($name = '', $phone = '') {
if ($name) {
$query->where('name', $value);
}
if ($phone) {
$query->join('phone');
$query->where('phone', $value);
}
}
Argumennya adalah bahwa dengan mendaftar argumen secara eksplisit, perilaku fungsi menjadi lebih jelas - sebagai lawan harus mempelajari kode untuk mencari tahu apa argumen misterius $param
itu.
Masalah saya adalah ini menjadi sangat bertele-tele ketika berhadapan dengan banyak argumen, seperti 10+. Apakah ada praktik yang disukai? Skenario terburuk saya akan melihat sesuatu seperti berikut:
searchQuery('', '', '', '', '', '', '', '', '', '', '', '', 'search_query')
foreach
ini tidak perlu, Anda bisa menggunakan if(!empty($params['name']))
alih-alih foreach
dan switch
.
!empty($params['name'])
untuk menguji parameter - misalnya, string "0" akan kosong. Lebih baik digunakan array_key_exists
untuk memeriksa kunci, atau isset
jika Anda tidak peduli null
.