3

我有一个整数/字符串变量。如果我在 mysqli 语句中有错误,它会变成String并且没有错误它会变成受影响的行数(Integer)。

但是在 PHP 中,如果我们有这样的东西:

$i = 0;
if ( $i < 0 || $i == null ) {
    var_dump($i);
}

我们有这个结果:

int 0

首先,我想知道为什么会这样?(我的意思是,如果var_dumpint 0,为什么if语句不起作用?)

其次,我想要比较的解决方案。

4

6 回答 6

4

您没有进行严格的比较。使用===而不是==.

==将转换类型然后比较

请改用以下方法之一。is_null是最干净的 IMO。

if ( $i < 0 || $i === null ) {..}

或者

if ( $i < 0 || is_null($i)) {..}
于 2013-02-01T21:26:42.933 回答
3

您正在比较 if 0 == nullare equal, not same ,根据文档,这是相同的:

以下内容被认为是空的:

""(一个空字符串)
0(0 为整数)
0.0(0 作为浮点数)
"0" (0 作为字符串)
空值
错误的
array() (一个空数组)
$var; (声明的变量,但没有值)
于 2013-02-01T21:26:23.370 回答
2

那是因为你使用==. 只要一个操作数是null- 然后另一个操作数被隐式转换为布尔值0- >false

http://php.net/manual/en/language.operators.comparison.php

bool 或 null 任何东西 转换为 bool,FALSE < TRUE

于 2013-02-01T21:26:16.273 回答
2

您需要比较类型

var_dump($i == null); //true
var_dump($i === null); //false

您可以使用

$i = 0;
if ( $i < 0 || $i === null ) {
    var_dump($i);
}
于 2013-02-01T21:26:51.050 回答
1

使用 === 比较器

if ( $i < 0 || $i === null ) { var_dump($i); }

于 2013-02-01T21:28:00.160 回答
1

使用该is_null()功能。

if ( $i < 0 || is_null($i) ) {
于 2013-02-01T21:29:18.097 回答