Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.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
PHP开关大小写默认值_Php_Switch Statement_Default - Fatal编程技术网

PHP开关大小写默认值

PHP开关大小写默认值,php,switch-statement,default,Php,Switch Statement,Default,如果switch语句前面有匹配的大小写,它的默认值会被计算吗 例: 所以对于x=50,你会看到foo和bar,或者foo和bar和nope 如果switch语句前面有匹配的大小写,它的默认值会被计算吗 在大多数情况下s不应该这样做,因为在那里通常会有中断s。但是,在您的情况下,它也会转到默认值 另外,请尽量避免做那些单行内容(为了可读性): 将打印foobarnope。所以要回答你的问题:是的:-)你自己试试会更容易 但是无论如何,如果在一个案例中不使用break,那么它后面的所有案例都将被执行

如果switch语句前面有匹配的大小写,它的默认值会被计算吗

例:

所以对于x=50,你会看到
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 
是,如果没有“中断”,则将执行第一个匹配的
案例之后的所有操作。控制流将“穿过”所有后续
案例
,并执行每个后续
案例
下的所有操作,直到
中断语句,或直到到达
开关
语句的末尾

在您的示例中,如果$x的值为50,您将实际看到
“nope”

请注意,
switch
实际上是在
switch
关键字后面的表达式和
case
关键字后面的每个表达式之间执行一个简单的相等测试

您的示例是不寻常的,因为当$x的值为0时,它只显示“foo”
。(实际上,当$x的值为0时,您将看到“foo-bar-nope”。)


将计算
case
关键字后面的表达式,在您的示例中,该表达式返回0(如果条件测试为false)或1(如果条件测试为true)。您是否尝试运行此代码?如果没有大小写匹配,将执行默认大小写。FYI
case($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的任何数字都将返回true
true==true
。prints
foobarnope
。一旦任何情况属实,以下所有情况(包括默认情况)都将运行,直至中断(或开关结束)。
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