切换特定条件的情况

时间:2016-09-14 14:26:02

标签: php if-statement switch-statement conditional-statements

如何处理以下情况的切换案例:

案例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())
{
  # ....
}

函数返回一个布尔值。

这可能不是一个好习惯,但我想知道在切换案例中这会是什么样子。

4 个答案:

答案 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。

相关问题