मेरे पास एक फ़ंक्शन है जो मापदंडों के एक सेट में लेता है, फिर उन पर 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।