Eu tenho uma função que recebe um conjunto de parâmetros e depois se aplica a eles como condições para uma consulta SQL. No entanto, embora eu fosse a favor de uma única matriz de argumentos contendo as próprias condições:
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;
}
}
}
Meu colega preferiu listar todos os argumentos explicitamente:
function searchQuery($name = '', $phone = '') {
if ($name) {
$query->where('name', $value);
}
if ($phone) {
$query->join('phone');
$query->where('phone', $value);
}
}
Seu argumento era que, ao listar os argumentos explicitamente, o comportamento da função se torna mais aparente - em vez de ter que se aprofundar no código para descobrir qual $param
era o argumento misterioso .
Meu problema era que isso fica muito detalhado ao lidar com muitos argumentos, como 10 ou mais. Existe alguma prática preferida? Meu pior cenário seria ver algo como o seguinte:
searchQuery('', '', '', '', '', '', '', '', '', '', '', '', 'search_query')
foreach
nesse caso, é desnecessário; você pode usar em if(!empty($params['name']))
vez de foreach
e switch
.
!empty($params['name'])
para testar parâmetros - por exemplo, a string "0" estaria vazia. É melhor usar array_key_exists
para verificar a chave ou isset
se você não se importa null
.