这是我的示例代码:
<?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
这里有什么问题?
答案 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的字符串值(或任何其他方式来实现这一点)