PHP中的SWITCH语句问题

时间:2012-03-05 13:43:19

标签: php switch-statement

这是我的示例代码:

<?php

$t = 0;

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

echo "<br/>";

echo system('php --version');

这是输出(在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

这里有什么问题?

2 个答案:

答案 0 :(得分:7)

您的变量$t具有整数值0。使用switch语句,您告诉PHP首先将其与值'add'(字符串)进行比较。 PHP does this by converting 'add'为整数,由于the rules of the conversion,结果为0

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

如果你做了

,你会看到预期的行为
$t = "0";

现在,$t'add'都是字符串,所以没有魔术转换,当然他们比较不等。

答案 1 :(得分:2)

那是因为你正在将int与字符串进行比较..如果强制将'add'转换为int,它将为0 ..“修复”你可以替换的switch语句

switch( $t )

switch( $t . '' )

这样告诉服务器他应该使用t的字符串值(或任何其他方式来实现这一点)