PHP中的Null、False和0有什么区别?
null 就是 null。false 就是 false。虽然 PHP 设计上希望更加一致(在这里的精选答案中有概述),但实际情况并不如此,特别是当考虑到一些方法返回的 false/null 的时候会变得很混乱(不易理解)。一些方法会用 null 而已经使用了 false,例如 filter_input()。如果变量未通过过滤,则它们返回 false,如果变量不存在,则返回 null (不存在是否也意味着未通过过滤?)。
当作者关心失败类型时,方法可以交替返回 false/null/string 等,例如,在 filter_input() 中,如果您关心验证失败的原因,则可以检查 ===false 或 ===null。但是,如果您没有注意到,这可能是一个陷阱,因为如果他们只记得编写 ===false 的测试用例,则可能会忘记添加对 ===null 的检查。大多数 php 单元测试/覆盖工具都不会提醒您缺少、未经测试的代码路径!最后,这里有一些有趣的类型转换,甚至不包括数组或对象。
var_dump( 0<0 ); #bool(false)
var_dump( 1<0 ); #bool(false)
var_dump( -1<0 ); #bool(true)
var_dump( false<0 ); #bool(false)
var_dump( null<0 ); #bool(false)
var_dump( ''<0 ); #bool(false)
var_dump( 'a'<0 ); #bool(false)
echo "\n";
var_dump( !0 ); #bool(true)
var_dump( !1 ); #bool(false)
var_dump( !-1 ); #bool(false)
var_dump( !false ); #bool(true)
var_dump( !null ); #bool(true)
var_dump( !'' ); #bool(true)
var_dump( !'a' ); #bool(false)
echo "\n";
var_dump( false == 0 ); #bool(true)
var_dump( false == 1 ); #bool(false)
var_dump( false == -1 ); #bool(false)
var_dump( false == false ); #bool(true)
var_dump( false == null ); #bool(true)
var_dump( false == '' ); #bool(true)
var_dump( false == 'a' ); #bool(false)
echo "\n";
var_dump( null == 0 ); #bool(true)
var_dump( null == 1 ); #bool(false)
var_dump( null == -1 ); #bool(false)
var_dump( null == false ); #bool(true)
var_dump( null == null ); #bool(true)
var_dump( null == '' ); #bool(true)
var_dump( null == 'a' ); #bool(false)
echo "\n";
$a=0; var_dump( empty($a) ); #bool(true)
$a=1; var_dump( empty($a) ); #bool(false)
$a=-1; var_dump( empty($a) ); #bool(false)
$a=false; var_dump( empty($a) ); #bool(true)
$a=null; var_dump( empty($a) ); #bool(true)
$a=''; var_dump( empty($a) ); #bool(true)
$a='a'; var_dump( empty($a)); # bool(false)
echo "\n"; #new block suggested by @thehpi
var_dump( null < -1 ); #bool(true)
var_dump( null < 0 ); #bool(false)
var_dump( null < 1 ); #bool(true)
var_dump( -1 > true ); #bool(false)
var_dump( 0 > true ); #bool(false)
var_dump( 1 > true ); #bool(true)
var_dump( -1 > false ); #bool(true)
var_dump( 0 > false ); #bool(false)
var_dump( 1 > true ); #bool(true)