根据:
$ 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。
答案 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)
相同,所以逻辑!