我有一个函数,它接受一组参数,然后将它们作为条件应用于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
。