J'ai une fonction qui prend un ensemble de paramètres, puis les applique en tant que conditions à une requête SQL. Cependant, alors que je favorisais un tableau d'arguments unique contenant les conditions elles-mêmes:
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;
}
}
}
Mon collègue a préféré plutôt énumérer tous les arguments explicitement:
function searchQuery($name = '', $phone = '') {
if ($name) {
$query->where('name', $value);
}
if ($phone) {
$query->join('phone');
$query->where('phone', $value);
}
}
Son argument était qu'en listant explicitement les arguments, le comportement de la fonction devient plus apparent - au lieu d'avoir à fouiller dans le code pour découvrir quel était l'argument mystérieux $param
.
Mon problème était que cela devient très verbeux lorsqu'il s'agit de nombreux arguments, comme 10+. Y a-t-il une pratique préférée? Mon pire scénario serait de voir quelque chose comme ceci:
searchQuery('', '', '', '', '', '', '', '', '', '', '', '', 'search_query')
foreach
n'est pas nécessaire dans ce cas, vous pouvez utiliser à la if(!empty($params['name']))
place de foreach
et switch
.
!empty($params['name'])
pour tester les paramètres - par exemple, la chaîne «0» serait vide. Il vaut mieux utiliser array_key_exists
pour vérifier la clé, ou isset
si vous ne vous souciez pas null
.