-1

根据 :

$ php -a
Interactive shell

php > var_dump("0" != 0); 
bool(false)
php > var_dump(0 != null);
bool(false)
php > var_dump("0" != null);
bool(true)

你能解释为什么最后一个断言是真的吗?

顺便说一句,它是 PHP cli 5.3.6。

4

6 回答 6

5

因为它是一个值为0的字符串,它并不像你想象的那样为空(包含“0”)

于 2012-04-18T08:42:53.050 回答
3

"0"不是空值。这是一个字符串。

""也不为空。那是一个空字符串。

于 2012-04-18T08:44:10.407 回答
3

这并不奇怪,它已记录在案

于 2012-04-18T08:45:25.747 回答
1
$ php -a
<?php
var_dump("config~123~123" == true);
bool(true)
var_dump("config~123~123" == 0);
bool(true)

一样,所以逻辑!

于 2012-05-07T15:01:13.133 回答
1

这是在手册页PHP 类型比较表中定义的。

我发现其中一些非常不直观。"0" == false例如,因为您可能经常有一个用户输入数字的表格,所以它是迟钝的0。现在您需要检查是否使用isset设置了字段,而不仅仅是使用if($field). 另请注意empty("0") == true

这就是为什么我用来===进行类型检查比较或使用没有自动类型转换的语言的原因。

于 2012-04-18T08:45:21.473 回答
1

“0”和 0 不是空值。“0”是一个字符串。0 是一个整数。null 是没有值的。

于 2012-04-18T08:45:22.173 回答