为什么这段代码输出1?

时间:2011-03-16 15:11:09

标签: php switch-statement

$t = true;
switch($t)
{
    case 1*2:
        echo 1;
}

3 个答案:

答案 0 :(得分:11)

manual for switch/case说:

  

请注意,开关/外壳的比较松散。

true == 2 is true

答案 1 :(得分:4)

switch语句在测试表达式与case标签中的表达式之间执行loose comparison

在这种情况下,这意味着编译器确定是否true == 2。由于任何非零整数比较等于true,因此将执行分支并执行echo 1;

这是一个不太直观的例子,其中完全相同的机制有效。你可以用相同的逻辑来解释它:

$foo = 'hello';
switch($foo) {
    case 'A' || 'B':
        echo "Test succeeded";
}

过去我在向新手教授PHP时使用过这个例子,让他们了解松散类型的语言是如何工作的。

答案 2 :(得分:0)

在PHP(以及大多数编程语言中)中,非零值表示在条件语句中处理时为true。在这种情况下, $ t (true)等于任何不同于零的数字,因此它与案例条件匹配。输出将为1.