У мене є функція, яка приймає набір параметрів, потім застосовує їх як умови до 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
.