ฉันมีฟังก์ชั่นที่ใช้ในชุดของพารามิเตอร์จากนั้นนำไปใช้กับพวกเขาเป็นเงื่อนไขในแบบสอบถาม 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
คืออะไร
ปัญหาของฉันคือการได้รับ verbose มากเมื่อจัดการกับข้อโต้แย้งมากมายเช่น 10+ มีวิธีปฏิบัติที่ต้องการหรือไม่? สถานการณ์กรณีที่เลวร้ายที่สุดของฉันจะเห็นบางสิ่งดังต่อไปนี้:
searchQuery('', '', '', '', '', '', '', '', '', '', '', '', 'search_query')
foreach
ไม่จำเป็นในกรณีนี้คุณสามารถใช้if(!empty($params['name']))
แทนและforeach
switch
!empty($params['name'])
เพื่อทดสอบพารามิเตอร์ - ตัวอย่างเช่นสตริง "0" จะว่างเปล่า มันเป็นเรื่องดีที่จะใช้array_key_exists
ในการตรวจสอบที่สำคัญหรือถ้าคุณไม่สนใจเกี่ยวกับisset
null