PHP开关大小写默认值
如果switch语句前面有匹配的大小写,它的默认值会被计算吗 例: 所以对于x=50,你会看到PHP开关大小写默认值,php,switch-statement,default,Php,Switch Statement,Default,如果switch语句前面有匹配的大小写,它的默认值会被计算吗 例: 所以对于x=50,你会看到foo和bar,或者foo和bar和nope 如果switch语句前面有匹配的大小写,它的默认值会被计算吗 在大多数情况下s不应该这样做,因为在那里通常会有中断s。但是,在您的情况下,它也会转到默认值 另外,请尽量避免做那些单行内容(为了可读性): 将打印foobarnope。所以要回答你的问题:是的:-)你自己试试会更容易 但是无论如何,如果在一个案例中不使用break,那么它后面的所有案例都将被执行
foo
和bar
,或者foo
和bar
和nope
如果switch语句前面有匹配的大小写,它的默认值会被计算吗
在大多数情况下
s不应该这样做,因为在那里通常会有中断
s。但是,在您的情况下,它也会转到默认值
另外,请尽量避免做那些单行内容(为了可读性):
将打印
foobarnope
。所以要回答你的问题:是的:-)你自己试试会更容易
但是无论如何,如果在一个案例中不使用break,那么它后面的所有案例都将被执行(包括默认情况)。开关不是这样工作的 : switch语句类似于上的一系列IF语句 同样的表情。在许多情况下,您可能想要比较相同的 变量(或表达式),并执行 不同的代码段取决于它等于哪个值。这是 switch语句的确切用途 像这样的评价
case ($x > 5):
简直等同于
case true:
或
取决于$x
的值,因为($x>5)
是一个评估,而不是一个值。开关比较参数的值,以查看它是否等同于任何案例
s
switch($x) {
case ($x > 5): // $x == ($x > 5)
echo "foo";
break;
case ($x <= 5): // $x == ($x <= 5)
echo "bar"
break;
default:
echo "default";
break;
}
这相当于
if ($x == true) {
echo "foo";
} elseif ($x == false) {
echo "bar";
} else {
echo "five";
}
if (true) { // $x == true is the same as saying "$x is truthy"
echo "foo";
} elseif (false) {
echo "bar";
} else {
echo "five";
}
但是,如果,您使用的switch语句是预期使用的(用于将参数与具体值进行比较):
并且,$x==50
,您的输出将是
foo bar foo-bar
由于您的案例中没有中断
如果您在每个案例的结尾添加了break
关键字,您将只执行该特定案例的代码
switch ($x) {
case 50:
echo "foo ";
break;
case 30:
echo "bar ";
break;
default:
echo "foo-bar";
break;
}
输出:
foo
是,如果没有“中断”,则将执行第一个匹配的案例之后的所有操作。控制流将“穿过”所有后续案例
,并执行每个后续案例
下的所有操作,直到中断遇到code>语句,或直到到达开关
语句的末尾
在您的示例中,如果$x的值为50,您将实际看到“nope”
请注意,switch
实际上是在switch
关键字后面的表达式和case
关键字后面的每个表达式之间执行一个简单的相等测试
您的示例是不寻常的,因为当$x的值为0时,它只显示“foo”
。(实际上,当$x的值为0时,您将看到“foo-bar-nope”。)
将计算case
关键字后面的表达式,在您的示例中,该表达式返回0(如果条件测试为false)或1(如果条件测试为true)。您是否尝试运行此代码?如果没有大小写匹配,将执行默认大小写。FYIcase($x>5)
计算结果为case 1:
或case true:
。如果没有break
,您的代码将尝试匹配所有条件。使用break
它将在第一次匹配时停止。如果代码中没有中断,它将执行第一个匹配案例以及之后的每个案例。确实,除了stackoverflow之外,还有其他地方可以找出问题的答案,但当我们这样做时,没有人可以收集rep;-)不,你没有。读你写的。你说你不能“那样”使用开关,你错了——你可以,没有什么能阻止任何人这样做。张贴一个半正确的答案是可怕的,有人会走进来读你写的东西,认为你是对的,而你不是。在案例中进行评估是完全有效且非常理想的代码。您的回答只显示了该语句的一种用法。@Matt-您试图解释的逻辑背后没有错,错的是您对switch
语句的解释。Switch语句的行为与if
语句完全相同。您可以比较值以获得真值
或假值
<代码>开关
只是一种方便发明,这样就不必键入100个if/else组合并将代码嵌套到遗忘中。@buggabill我不太确定它是否非常理想,但它是有效的。我的观点是,除非完全理解为什么要使用它,否则不应该以那种方式使用它。@Matt,有一句话我不同意。“除非$x==1,否则上述代码的输出将始终为默认值”。这是不真实的。例如,在比较中,$x==($x>5)
有一个$x到布尔值的隐式转换,只要$x=0如果$x=0
,该语句将实际返回true,因为$x将为false,$x>5将为false,因此您将得到false==false
。如果$x=1到5,则当任何非0数字转换为布尔值true时,语句将返回false。因此,语句变为true==false
。大于5的任何数字都将返回truetrue==true
。printsfoobarnope
。一旦任何情况属实,以下所有情况(包括默认情况)都将运行,直至中断(或开关结束)。
if (true) { // $x == true is the same as saying "$x is truthy"
echo "foo";
} elseif (false) {
echo "bar";
} else {
echo "five";
}
switch ($x) {
case 50:
echo "foo ";
case 30:
echo "bar ";
default:
echo "foo-bar";
}
foo bar foo-bar
switch ($x) {
case 50:
echo "foo ";
break;
case 30:
echo "bar ";
break;
default:
echo "foo-bar";
break;
}
foo