Tôi có một hàm lấy một tập các tham số, sau đó áp dụng cho chúng làm điều kiện cho truy vấn SQL. Tuy nhiên, trong khi tôi ủng hộ một mảng đối số duy nhất chứa các điều kiện:
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;
}
}
}
Thay vào đó, đồng nghiệp của tôi thích liệt kê tất cả các đối số một cách rõ ràng:
function searchQuery($name = '', $phone = '') {
if ($name) {
$query->where('name', $value);
}
if ($phone) {
$query->join('phone');
$query->where('phone', $value);
}
}
Lập luận của ông là bằng cách liệt kê các đối số một cách rõ ràng, hành vi của hàm trở nên rõ ràng hơn - trái ngược với việc phải đi sâu vào mã để tìm hiểu xem đối số bí ẩn $param
là gì.
Vấn đề của tôi là điều này trở nên rất dài dòng khi xử lý nhiều tranh luận, như 10+. Có thực hành ưa thích? Trường hợp xấu nhất của tôi sẽ là một cái gì đó như sau:
searchQuery('', '', '', '', '', '', '', '', '', '', '', '', 'search_query')
foreach
cần thiết trong trường hợp này, bạn có thể sử dụng if(!empty($params['name']))
thay vì foreach
và switch
.
!empty($params['name'])
để kiểm tra các tham số - ví dụ: chuỗi "0" sẽ trống. Tốt hơn là sử dụng array_key_exists
để kiểm tra chìa khóa hoặc isset
nếu bạn không quan tâm null
.