PHP变量随机更改

时间:2013-08-31 00:59:15

标签: php variables if-statement

我在一些PHP代码中遇到了一个非常奇怪且有问题的问题。我明确应该返回false时,我在IF语句中返回true的变量。

$pr = $_SESSION['fin_print_printer']; //this should equal 0     
print $pr; //this returns 0, as it should
if($pr == "L"){
   print "local";
} else {
       print "serve";
} 
print $pr; //this returns 0 again, as it should

这会在我的脚本中打印“local”(在两个零之间)并且不会打印“serve”。在我的项目中有超过100,000行代码,我还没有遇到过这个问题,现在我无法弄清楚发生了什么。

如果我这样做($ pr ===“L”),那么它按预期工作,但上面没有。

3 个答案:

答案 0 :(得分:1)

PHP试图将'L'强制转换为int,结果为0。

intval('L'); // 0

将您的代码更改为以下内容,以便将类型考虑在内:

if($pr === "L")
{
    print "local";
} 
else 
{
    print "serve";
} 

或者手动将$pr强制转换为字符串。

// You can also to (string)$pr ("0" instead of 0)
if(strval($pr) == "L")
{
    print "local";
} 
else 
{
    print "serve";
} 

答案 1 :(得分:0)

也许你使用类型转换(我没有检查):

if ( (string)$pr == "L" ) {
   print "local";
} else {
       print "serve";
}

答案 2 :(得分:0)

鲜为人知的方法:您也可以像

一样进行投射
if ("L" == $pr) {

由于松散的比较,PHP会将正确的值转换为左值的类型,并且正如您已经意识到的那样,string(1)"L"已投放到int(0)int(0)是已转为string(1)"0"