我有一个Integer / String变量。如果我在mysqli语句中有错误,它将变为字符串并且没有错误,它将变为affected rows(整数)的数字。
但是在PHP中如果我们有这样的东西:
$i = 0;
if ( $i < 0 || $i == null ) {
var_dump($i);
}
我们有这个结果:
int 0
首先,我想知道为什么会这样? (我的意思是,如果var_dump
为int 0
,为什么 if 语句不起作用?)
第二次,我想要比较的解决方案。
答案 0 :(得分:3)
您是在比较0 == null
是否相等,而不是identical,根据documentation,它是相同的:
以下内容被认为是空的:
"" (an empty string) 0 (0 as an integer) 0.0 (0 as a float) "0" (0 as a string) NULL FALSE array() (an empty array) $var; (a variable declared, but without a value)
答案 1 :(得分:2)
那是因为你使用==
。只要一个操作数是null
- 然后另一个操作数被隐式地转换为布尔值0
- &gt; false
http://php.net/manual/en/language.operators.comparison.php
bool或null任何转换为bool,FALSE&lt; TRUE
答案 2 :(得分:2)
您没有进行严格的比较。
使用===
代替==
。
==
会转换类型,然后进行比较
请改用以下其中一项。 is_null
是最干净的IMO。
if ( $i < 0 || $i === null ) {..}
OR
if ( $i < 0 || is_null($i)) {..}
答案 3 :(得分:2)
您需要比较类型
var_dump($i == null); //true
var_dump($i === null); //false
您可以使用
$i = 0;
if ( $i < 0 || $i === null ) {
var_dump($i);
}
答案 4 :(得分:1)
使用===比较器
if ( $i < 0 || $i === null ) {
var_dump($i);
}
答案 5 :(得分:1)
使用is_null()
功能。
if ( $i < 0 || is_null($i) ) {