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