Mam funkcję, która przyjmuje zestaw parametrów, a następnie stosuje się do nich jako warunki do zapytania SQL. Jednakże, chociaż faworyzowałem tablicę pojedynczych argumentów zawierającą same warunki:
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;
}
}
}
Mój kolega wolał zamiast tego jawnie wymienić wszystkie argumenty:
function searchQuery($name = '', $phone = '') {
if ($name) {
$query->where('name', $value);
}
if ($phone) {
$query->join('phone');
$query->where('phone', $value);
}
}
Jego argumentem było to, że poprzez jawne wyszczególnienie argumentów, zachowanie funkcji staje się bardziej widoczne - w przeciwieństwie do konieczności zagłębiania się w kod, aby dowiedzieć się, co to $param
był za tajemniczy argument .
Mój problem polegał na tym, że staje się to bardzo gadatliwe, gdy mamy do czynienia z wieloma argumentami, takimi jak 10+. Czy jest jakaś preferowana praktyka? Mój najgorszy scenariusz wyglądałby następująco:
searchQuery('', '', '', '', '', '', '', '', '', '', '', '', 'search_query')
foreach
w tym przypadku nie jest konieczne, możesz użyć if(!empty($params['name']))
zamiast foreach
i switch
.
!empty($params['name'])
na ślepo do testowania parametrów - na przykład ciąg „0” byłby pusty. Lepiej użyć, array_key_exists
aby sprawdzić klucz, lub isset
jeśli cię to nie obchodzi null
.