PHP:将整数/字符串变量与Null比较

7

我有一个整数/字符串变量。如果在mysqli语句中出错,则变为字符串,而没有错误时则成为受影响的行数的数量(整数)。

但是在PHP中,如果我们像这样:

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

我们有以下结果:
int 0

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

其次,我想要解决方案来进行比较。


因为 0 被视为空(NULL - Kermit
1
请使用类型安全比较:=== null - Fabian Schmengler
1
http://codepad.org/dWmodFRs - Peter
@PeterSzymkowski 很棒的例子。 - Kermit
6个回答

7
您没有进行严格比较。 请使用===而不是====会转换类型然后进行比较。
请改用以下其中一种。在我看来,is_null最干净。
if ( $i < 0 || $i === null ) {..}

或者

if ( $i < 0 || is_null($i)) {..}

3
您正在比较0 == null是否相等,而不是全等,根据文档,它们是一样的:
以下情况都被认为是空的:
""(一个空字符串)
0(整数0)
0.0(浮点数0)
"0"(字符串0)
NULL
FALSE
array()(一个空数组)
$var;(一个声明但没有赋值的变量)

3
你需要比较类型。
var_dump($i == null); //true
var_dump($i === null); //false

您可以使用

标签

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

2

1
使用 === 比较器 if ( $i < 0 || $i === null ) { var_dump($i); }

comparator - 你从哪里得到这个词的? :-S 它是一个“操作符”,“comparator”通常是传递给排序函数的比较函数。 - zerkms
英语不是我的母语...我想我只是把“比较运算符”这个词拼成了一个单词。 - nimlhug
实际上这不是关于英语,而是关于编程术语。 - zerkms

1
使用 is_null() 函数。
if ( $i < 0 || is_null($i) ) {

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接