[英]Better way for PHP Switch Statement with Condition operator in each Case? Optimization
[英]A better way than a switch case
我有一个使用类似于以下代码块的 switch-case 块的方法:
switch ($totalMonthsFromImmigration) {
case $totalMonthsFromImmigration <= 18:
$this->clauses->put('immigrant_1', $this->clauses->get('immigrant'));
$this->clauses->put('immigrant_2', null);
$this->clauses->put('immigrant_3', null);
break;
case $totalMonthsFromImmigration <= 30:
$this->clauses->put('immigrant_1', null);
$this->clauses->put('immigrant_2', $this->clauses->get('immigrant'));
$this->clauses->put('immigrant_3', null);
break;
case $totalMonthsFromImmigration <= 42:
$this->clauses->put('immigrant_1', null);
$this->clauses->put('immigrant_2', null);
$this->clauses->put('immigrant_3', $this->clauses->get('immigrant'));
break;
}
从上面的例子可以看出,案例做的事情相似,但有一点不同。
有没有更优雅的方法来处理这种情况? 我真的不喜欢代码的重复。
执行此操作的另一种方法,如果您想从Switch case 更改,请尝试IF
if ($totalMonthsFromImmigration <= 18){
$this->clauses->put('immigrant_1', $this->clauses->get('immigrant'));
} else if ($totalMonthsFromImmigration <= 30) {
$this->clauses->put('immigrant_2', $this->clauses->get('immigrant'));
else if ($totalMonthsFromImmigration <= 42) {
$this->clauses->put('immigrant_3', $this->clauses->get('immigrant'));
}
如果不需要像 @Jignesh Joisar 这样的默认值调用 setter 两次:
$this->clauses->put('immigrant_1', ($totalMonthsFromImmigration <= 18) ? $this->clauses->get('immigrant') : null);
$this->clauses->put('immigrant_2', ($totalMonthsFromImmigration > 18 && $totalMonthsFromImmigration <= 30) ? $this->clauses->get('immigrant') : null);
$this->clauses->put('immigrant_3', ($totalMonthsFromImmigration > 30 && $totalMonthsFromImmigration <= 42) ? $this->clauses->get('immigrant') : null);
尝试设置默认值,然后根据条件添加值
$this->clauses->put('immigrant_1', null);
$this->clauses->put('immigrant_2', null);
$this->clauses->put('immigrant_3', null);
switch ($totalMonthsFromImmigration) {
case $totalMonthsFromImmigration <= 18:
$this->clauses->put('immigrant_1', $this->clauses->get('immigrant'));
break;
case $totalMonthsFromImmigration <= 30:
$this->clauses->put('immigrant_2', $this->clauses->get('immigrant'));
break;
case $totalMonthsFromImmigration <= 42:
$this->clauses->put('immigrant_3', $this->clauses->get('immigrant'));
break;
}
我认为有一个数学公式可以代替使用 switch case 或 if else。 但我一个也没找到。 这是我根据我在这里看到的答案的解决方案:
$this->clauses->put('immigrant_1', null);
$this->clauses->put('immigrant_2', null);
$this->clauses->put('immigrant_3', null);
if ($totalMonthsFromImmigration <= 18) {
$this->clauses->put('immigrant_1', $this->clauses->get('immigrant'));
} else if ($totalMonthsFromImmigration <= 30) {
$this->clauses->put('immigrant_2', $this->clauses->get('immigrant'));
} else if ($totalMonthsFromImmigration <= 42) {
$this->clauses->put('immigrant_3', $this->clauses->get('immigrant'));
}
switch ($totalMonthsFromImmigration) {
case $totalMonthsFromImmigration <= 42:
$this->clauses->put('immigrant_1', $this->clauses->get('immigrant'));
$this->clauses->put('immigrant_2', null);
$this->clauses->put('immigrant_3', null);
break;
default:
echo "Your logic you want greeter then 42"
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.