У меня есть функция, которая принимает набор параметров, а затем применяет их как условия к SQL-запросу. Однако, пока я предпочитаю массив с одним аргументом, содержащий сами условия:
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;
}
}
}
Вместо этого мой коллега предпочел явно перечислить все аргументы:
function searchQuery($name = '', $phone = '') {
if ($name) {
$query->where('name', $value);
}
if ($phone) {
$query->join('phone');
$query->where('phone', $value);
}
}
Его аргумент состоял в том, что при явном перечислении аргументов поведение функции становится более очевидным - в отличие от необходимости копаться в коде, чтобы выяснить, что это за загадочный аргумент $param
.
Моя проблема заключалась в том, что это становится очень многословным, когда приходится иметь дело со многими аргументами, такими как 10+. Есть ли предпочтительная практика? Мой худший сценарий будет выглядеть примерно так:
searchQuery('', '', '', '', '', '', '', '', '', '', '', '', 'search_query')
foreach
в этом случае ненужно, вы можете использовать if(!empty($params['name']))
вместо foreach
и switch
.
!empty($params['name'])
для проверки параметров - например, строка «0» будет пустой. Лучше использовать, array_key_exists
чтобы проверить ключ, или, isset
если вам все равно null
.