有人告诉我,好的开发人员可以当场/使用之间的区别Null
,并False
与0
所有的其他的好"一无所有"的实体.
什么是区别,特别是在PHP?它与之有关===
吗?
Null
意思是" 没有 ".var尚未初始化.
False
意味着" 在布尔上下文中不是真的 ".用于明确显示您正在处理逻辑问题.
0
是一个int
.与上面的其余部分无关,用于数学.
现在,有点棘手的是,在像PHP这样的动态语言中,它们都在布尔上下文中有一个值,(在PHP中)False
.
如果你测试它==
,它正在测试布尔值,所以你会得到相等.如果你测试它===
,它将测试类型,你将得到不平等.
好吧,看看strrpos()
功能.如果没有找到任何内容,则返回False,如果在字符串的开头找到了某些内容,则返回0!
当然,如果你处理国家:
你想在DebugMode = False
(设置为关闭),DebugMode = True
(设置为打开)和DebugMode = Null
(根本不设置,将导致硬调试;-) 之间产生差异.
null
是null
.false
是false
.伤心但真实.
PHP中没有太多的一致性.开发者TRY使null意味着"未知"或"不存在".但通常False将作为"不存在"(例如strrpos('fail','search')将返回false,而不是null)
当他们已经使用false作为某些东西时,你经常会看到null被使用.例如filter_input().如果变量未通过过滤器,则返回false.如果变量不存在则返回null(不存在意味着它也失败了过滤器?所以为什么甚至返回null?!?)
php具有在函数中返回数据的便利.并且开发人员填写所有类型的故障状态而不是数据.
在PHP中没有理智的方法来检测失败的数据(int,str等)(false,null)
您几乎必须始终测试=== null或=== false,具体取决于函数.或者两者都有,例如filter_input()/ filter_var()
这里有类型杂耍的乐趣.甚至不包括数组和对象.
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)
以下是一个例子:
Comparisons of $x with PHP functions Expression gettype() empty() is_null() isset() boolean : if($x) $x = ""; string TRUE FALSE TRUE FALSE $x = null; NULL TRUE TRUE FALSE FALSE var $x; NULL TRUE TRUE FALSE FALSE $x is undefined NULL TRUE TRUE FALSE FALSE $x = array(); array TRUE FALSE TRUE FALSE $x = false; boolean TRUE FALSE TRUE FALSE $x = true; boolean FALSE FALSE TRUE TRUE $x = 1; integer FALSE FALSE TRUE TRUE $x = 42; integer FALSE FALSE TRUE TRUE $x = 0; integer TRUE FALSE TRUE FALSE $x = -1; integer FALSE FALSE TRUE TRUE $x = "1"; string FALSE FALSE TRUE TRUE $x = "0"; string TRUE FALSE TRUE FALSE $x = "-1"; string FALSE FALSE TRUE TRUE $x = "php"; string FALSE FALSE TRUE TRUE $x = "true"; string FALSE FALSE TRUE TRUE $x = "false"; string FALSE FALSE TRUE TRUE
有关PHP 中类型比较的更多参考,请参阅此内容.它应该让你清楚地了解.
False,Null,Nothing,0,Undefined等等.
这些中的每一个都具有与实际概念相关的特定含义.有时,多个含义会重载到单个关键字或值中.
在C和C++中NULL
,False
和0
重载到相同的值.在C#中,它们是3个不同的概念.
null
或NULL
通常表示缺乏价值,但通常没有说明原因.
0
表示自然数为零,并且类型等价于1,2,3等,并且在支持单独概念的语言中,NULL
应仅处理一个数字.
错误表示不真实.它用于二进制值.这并不意味着未设置,也不意味着0
.它只是表示两个二进制值之一.
没有任何东西可以表明该值被特别设置为什么都没有指示与null相同的东西,但是有意图.
某些语言中未定义表示尚未设置该值,因为没有代码指定实际值.
在PHP中,您可以使用===和!==运算符来检查值是否相等以及它们的类型是否匹配.因此,例如:0 == false
是true
,但是0 === false
是false
.这同样适用于!=
对!==
.此外,如果您null
使用上述运算符与其他两个进行比较,则期望得到类似的结果.
现在在PHP中,这种值的质量通常在返回有时可能为0
(零)的值时使用,但有时可能是函数失败.在PHP的这种情况下,您返回false
,您必须使用身份运算符检查这些情况===
.例如,如果您正在搜索另一个字符串中的一个字符串并且您正在使用strpos()
此函数,则此函数将返回数字位置,如果在最开始找到该字符串,则该数字位置可以为0,但如果找不到该字符串,则所有,然后strpos()
将返回false
,你必须在处理结果时考虑到这一点.
如果您将在函数中使用相同的技术,那么熟悉标准PHP库的任何人都将了解正在发生的事情以及如何检查返回的值是否是想要的或者在处理时发生了一些错误.对于函数参数实际上也是如此,你可以根据它们是数组还是字符串或者不是它来处理它们,并且这种技术在整个PHP中也被大量使用,所以每个人都会很容易地得到它.所以我猜这就是力量.