パラメーターのセットを受け取り、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
。