Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在案例中使用isset时,这个php开关发生了什么?_Php_Switch Statement - Fatal编程技术网

在案例中使用isset时,这个php开关发生了什么?

在案例中使用isset时,这个php开关发生了什么?,php,switch-statement,Php,Switch Statement,为什么产出不如预期 更新:预期输出“bc”是一个打字错误,应为“ac” 更新:我现在看到这段代码如何产生与预期不同的输出。在第一个返回true的情况之后,开关块中的每个代码段都将被执行,除非开关以中断结束。断点后,不会测试其他情况。这就是我的错误所在,因为我希望在没有中断语句的情况下,每种情况下都能恢复测试。这很难理解,也没有任何意义 这不是switch语句的工作方式。我不确定您在这里想做什么,但我认为您对switch语句的工作方式有点混淆。switch语句本质上是拥有大量IF语句的一种更优雅的

为什么产出不如预期

更新:预期输出“bc”是一个打字错误,应为“ac”


更新:我现在看到这段代码如何产生与预期不同的输出。在第一个返回true的情况之后,开关块中的每个代码段都将被执行,除非开关以中断结束。断点后,不会测试其他情况。这就是我的错误所在,因为我希望在没有中断语句的情况下,每种情况下都能恢复测试。

这很难理解,也没有任何意义


这不是switch语句的工作方式。

我不确定您在这里想做什么,但我认为您对switch语句的工作方式有点混淆。switch语句本质上是拥有大量IF语句的一种更优雅的方式。因此,如果您有一个变量$a,并且希望根据其值执行某种逻辑,那么您可以使用if语句或条件语句来执行。例如:

$a = true;
//b is unset;

switch(true) {
    case ($a): echo 'a';
    case (isset($b)): echo 'b';
    default: echo 'c';
}

//outputs 'abc'. expected output is 'bc'

但是你不能打开true,true没有打开的价值——它只是真的

伊修斯编写的代码是正确的。这只是一个很好的方法来找出以下哪种情况是正确的

您的代码无法正常工作,因为您没有将break语句放在每个案例中

应该是这样的:

//WITH IF STATEMENTS
if($a == 1) {
     echo "the value was 1";
}
else if($a == 2) {
     echo "the value was 2";
}
else { 
     echo "the value was not 1 or 2";
}

//WITH SWITCH STATEMENT
switch($a) {
   case 1:
      echo "the value was 1";
      break; //the break stops it just going onto the next case
   case 2: 
      echo "the value was 2";
      break;
   default: //this happens if none of the previous cases are true
      echo "the value was neither 1 or 2"

输出为“a”。我不知道您为什么期望得到“bc”输出。

我不知道,当您已将
$a
明确设置为
true
时,您为什么期望输出为
bc
。您正在比较
true==true
,这显然是一个积极的比较

什么是
开关
语句,它接受一个值,然后将其与
case
语句指定的值进行松散的比较。两者的输入都可以是表达式。一旦比较为正,代码就会执行,直到遇到
中断
,或者到达
开关
语句的末尾

因此,要分解您的代码:

$a = true;
//b is unset;

switch(true) 
{
    case ($a): 
            { 
            echo 'a'; 
            break;
             }

    case (isset($b)): 
            { 
            echo 'b'; 
            break; 
            }

    default:  echo 'c';
}
$a = true;

switch(true) {
    case ($a):  // $a == true, which is the case so we start to execute
      echo 'a'; 
    case (isset($b)): // isset($b) == true, which is not the case, but we still continue because of the lack of a break;
      echo 'b';
    default: echo 'c'; // again, we get here because there is no break;
}