如何处理以下情况的切换案例:
案例1看起来像这样:
select routename,sequence,startx,starty
from table
union all
select routename, max(sequence)+1 as sequence, endx as startx, endy as starty
from table
group by routename
order by routename
案例2看起来像这样,依此类推:
if($this->hasA() && $this->hasB() && $this->hasC() && $this->hasD())
{
# ....
}
函数返回一个布尔值。
这可能不是一个好习惯,但我想知道在切换案例中这会是什么样子。
答案 0 :(得分:1)
我个人不会在if
上执行此操作,但您可以启用true
:
switch(true) {
case $this->hasA() && $this->hasB() && $this->hasC() && $this->hasD():
//code
break;
case $this->hasA() && $this->hasB():
//code
break;
}
请记住,每个案例($this->hasA()
和$this->hasB()
在上面的代码中执行两次函数),所以如果它们很昂贵(复杂查询,文件加载等),那么你是最好再运行一次,然后多次检查结果。
如果任何一个案例共享一些代码,那么你将按顺序构建它,而不是使用break
,以便一个案例将执行到下一个案例。从你的例子中不清楚是否有一些公共代码。
一个简单的例子:
switch(true) {
case $this->hasA():
//code
case $this->hasB():
//case above may or may not execute
//more code
case $this->hasC():
//one or both cases above may or may not execute
//more code
break;
}
答案 1 :(得分:0)
这会像开关那样尴尬;如果你必须这样做,我会设置为这样的布尔:
switch($this->hasA() && $this->hasB() && $this->hasC() && $this->hasD()) {
case true:
//do true function
break;
default:
//do false function
break;
}
只有布尔类型排列是可能的,因为所有4个$this->has()
条件都为真,或者如果1为假,则整个条件为假。
答案 2 :(得分:0)
要使用switch语句,您需要将四个布尔变量组合成一个变量,例如
<?php
$a = 1;
$b = 0;
$c = 1;
$d = 1;
$str = $a.$b.$c.$d;
switch($str){
case('0000'):
echo('Case 1: '.$str);
break;
case('0001'):
echo('Case 2: '.$str);
break;
//...
case('1111');
echo('Case 16: '.$str);
break;
}
?>
答案 3 :(得分:0)
我似乎不是一个好习惯。 Switch主要用于检查单个变量的值(最常见的是字符串和整数),并根据其值执行块。
在你需要评估布尔类型变量组合的情况下,最好坚持使用if else。