PHP中的SWITCH语句问题

Vit*_*lov 4 php switch-statement

这是我的示例代码:

<?php

$t = 0;

switch( $t )
{
    case 'add':
        echo 'add';
        break;
    default:
        echo 'default';
        break;
}

echo "<br/>";

echo system('php --version');
Run Code Online (Sandbox Code Playgroud)

这是输出(在codepad.org上测试 - 结果是相同的):

add
PHP 5.3.6-13ubuntu3.6 with Suhosin-Patch (cli) (built: Feb 11 2012 03:26:01) Copyright (c) 1997-2011 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2011 Zend Technologies Zend Engine v2.3.0, Copyright (c) 1998-2011 Zend Technologies
Run Code Online (Sandbox Code Playgroud)

这有什么不对?

Jon*_*Jon 7

您的变量$t具有整数值0.使用该switch语句,您告诉PHP首先将其与值'add'(字符串)进行比较.PHP 通过转换 'add'为整数来实现这一点,并且由于转换规则,结果证明是0.

结果,第一个分支被采取 - 这可能是令人惊讶的,但它也是预期的.

如果你这样做,你会看到预期的行为

$t = "0";
Run Code Online (Sandbox Code Playgroud)

现在,无论是$t和'add'都是字符串,所以没有神奇的转换正在进行,当然他们比较不等.