Ich habe eine Funktion, die eine Reihe von Parametern aufnimmt und diese dann als Bedingungen für eine SQL-Abfrage anwendet. Ich bevorzuge jedoch ein einzelnes Argument-Array, das die Bedingungen selbst enthält:
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;
}
}
}
Mein Kollege hat es vorgezogen, alle Argumente explizit aufzulisten:
function searchQuery($name = '', $phone = '') {
if ($name) {
$query->where('name', $value);
}
if ($phone) {
$query->join('phone');
$query->where('phone', $value);
}
}
Sein Argument war, dass durch die explizite Auflistung der Argumente das Verhalten der Funktion offensichtlicher wird - anstatt sich mit dem Code befassen zu müssen, um herauszufinden, was das mysteriöse Argument $param
war.
Mein Problem war, dass dies sehr ausführlich wird, wenn man mit vielen Argumenten wie 10+ umgeht. Gibt es eine bevorzugte Praxis? In meinem Worst-Case-Szenario würde etwa Folgendes auftreten:
searchQuery('', '', '', '', '', '', '', '', '', '', '', '', 'search_query')
foreach
ist in diesem Fall unnötig, Sie könnten if(!empty($params['name']))
statt foreach
und verwenden switch
.
!empty($params['name'])
, um auf Parameter zu testen - zum Beispiel wäre die Zeichenfolge "0" leer. Es ist besser, array_key_exists
nach dem Schlüssel zu suchen, oder isset
wenn Sie sich nicht darum kümmern null
.