我在一些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”),那么它按预期工作,但上面没有。
答案 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"
。