Ho una funzione che accetta una serie di parametri, quindi li applica come condizioni a una query SQL. Tuttavia, mentre ho preferito un singolo array di argomenti contenente le condizioni stesse:
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;
}
}
}
Il mio collega ha preferito elencare esplicitamente tutti gli argomenti invece:
function searchQuery($name = '', $phone = '') {
if ($name) {
$query->where('name', $value);
}
if ($phone) {
$query->join('phone');
$query->where('phone', $value);
}
}
La sua argomentazione era che elencando gli argomenti esplicitamente, il comportamento della funzione diventa più evidente - al contrario di dover approfondire il codice per scoprire quale fosse l'argomento misterioso $param
.
Il mio problema era che questo diventa molto dettagliato quando si affrontano molti argomenti, come 10+. C'è qualche pratica preferita? Il mio scenario peggiore sarebbe vedere qualcosa di simile al seguente:
searchQuery('', '', '', '', '', '', '', '', '', '', '', '', 'search_query')
foreach
non è necessario in questo caso, è possibile utilizzare al if(!empty($params['name']))
posto di foreach
e switch
.
!empty($params['name'])
per testare i parametri - per esempio, la stringa "0" sarebbe vuota. È meglio usare array_key_exists
per verificare la chiave, o isset
se non ti interessa null
.