PHP的奇怪行为

时间:2012-04-18 08:42:21

标签: php

根据:

$ 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。

6 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:3)

"0"不是null。这是一个字符串。

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

答案 2 :(得分:3)

这并不奇怪,it's documented

答案 3 :(得分:1)

这在手册页PHP type comparison tables中定义。

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

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

答案 4 :(得分:1)

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

答案 5 :(得分:1)

$ php -a
<?php
var_dump("config~123~123" == true);
bool(true)
var_dump("config~123~123" == 0);
bool(true)

相同,所以逻辑!