我对比较“错误”感到困惑。我编码这个比较的方式,我想确保如果用户输入除0 或 1(或没有值)以外的任何值,结果应该是 0:
session_start();
function test( $status = 0 ) {
if( !isset($_SESSION['status']) ) { $_SESSION['status'] = 0; }
else {
switch( $status ) {
case 0: $_SESSION['status'] = $status;
break;
case 1: $_SESSION['status'] = $status;
break;
default:
$_SESSION['status'] = 0;
$status = 0;
}
}
echo 'Variable value: ' . $status;
echo ' | Session value: ' . $_SESSION['status'] . "<br/>";
}
test();
test(0);
test(1);
test(999);
test('ready');
但是,它会中断,test('ready');
因为它输出Variable value: ready | Session value: ready
RATHER THAN Variable value: 0 | Session value: 0
。case o:
即使它正在将数字与字符串进行比较,它也应该继续正常工作(并继续前进)。
顺便说一句:即使我替换switch
为,结果也是一样的if( $status ===
=== 编辑:2012 年 12 月 19 日 ===
感谢@bryan-b和@jatochnietdan的评论和回答:-Because a string (when compaired with numbers [
if( 0 == 'string')] ) is compared as 0
这帮助我找出了问题并了解到,与其他语言不同,它不会在比较中自动返回 false,因为它们具有不同的数据类型;php 比较字符串变量,就好像它们的值与数字比较时为 0。这是需要注意的。
这是更正的(工作)代码:
session_start();
function test( $status = 0 ) {
if( !isset($_SESSION['status']) ) { $_SESSION['status'] = 0; }
else {
switch( $status ) {
case 1: $_SESSION['status'] = $status;
break;
default:
$_SESSION['status'] = 0;
$status = 0;
}
}
echo 'Variable value: ' . $status;
echo ' | Session value: ' . $_SESSION['status'] . "<br/>";
}
test();
test(0);
test(1);
test(999);
test('ready');
谢谢@bryan-b和@jatochnietdan!!!
PS。我希望我可以投票 2 个答案。