Oma*_*mar 1 php variables string-comparison
我对比较"错误"感到困惑.我编码这种比较的方式,我想确保如果用户输入除 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');
Run Code Online (Sandbox Code Playgroud)
然而,它打破在test('ready');,因为它输出Variable value: ready | Session value: ready,而不是Variable value: 0 | Session value: 0.case o:即使将数字与字符串进行比较,它也应该继续运行良好(并且继续).
顺便说一下:即使我换switch了,结果也一样if( $status ===
===编辑:12/19/2012 ===
感谢@ bryan-b和@jatochnietdan评论和回答:-Because a string (when compaired with numbers [if(0 =='string')] ) is compared as 0
这帮助我弄清楚了问题,并了解到,与其他语言不同,它不是在比较中自动返回false,因为它们具有不同的数据类型 ; php将字符串变量与数字进行比较时的值进行比较.这有点值得关注.
这是更正(工作)的代码:
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');
Run Code Online (Sandbox Code Playgroud)
PS.我希望我能投2个答案.
如果您真正想要的是$ _SESSION ['status']的值为0,如果输入的不是1,那么这应该足够了:
function test( $status = 0 ) {
$_SESSION['status'] = ($status == 1 ? 1 : 0);
}
Run Code Online (Sandbox Code Playgroud)
通过测试,值如下:
Session value: 0
Session value: 0
Session value: 1
Session value: 0
Session value: 0
Run Code Online (Sandbox Code Playgroud)
编辑:修正了一个轻微的错误,它默认为1,但我相信你希望它默认为0.
至于你的代码,它是"准备好"的原因是因为你在案例0中将$ _SESSION ['status']设置为$ status而在该实例中$ status包含"ready".您可以通过简单地执行$ _SESSION ['status'] = 0来解决这个问题.
| 归档时间: |
|
| 查看次数: |
554 次 |
| 最近记录: |