Bir parametreler kümesinde yer alan ve ardından bir SQL sorgusuna koşul olarak uygulanan bir işleve sahibim. Bununla birlikte, koşulları içeren tek bir argüman dizisini tercih ederken:
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;
}
}
}
Meslektaşım açıkça tüm argümanları listelemeyi tercih etti:
function searchQuery($name = '', $phone = '') {
if ($name) {
$query->where('name', $value);
}
if ($phone) {
$query->join('phone');
$query->where('phone', $value);
}
}
Argümanı, argümanları açıkça listeleyerek, fonksiyonun davranışının daha belirgin hale gelmesiydi - gizemli argümanın ne olduğunu bulmak için koda atlamak zorunda kalmanın aksine $param
.
Benim sorunum, 10+ gibi birçok argümanla uğraşırken bunun çok ayrıntılı olmasıydı. Tercih edilen bir uygulama var mı? Benim en kötü senaryom, şöyle bir şey görmek olacaktır:
searchQuery('', '', '', '', '', '', '', '', '', '', '', '', 'search_query')
foreach
gereksizdir bu durumda şunu kullanabilirsiniz if(!empty($params['name']))
yerine foreach
ve switch
.
!empty($params['name'])
parametreleri test etmek için kör kullanmayın - örneğin, "0" dizesi boş kalır. array_key_exists
Anahtarı kontrol etmek için ya isset
da umursamıyorsanız kullanmak daha iyidir null
.