当前位置:  开发笔记 > 编程语言 > 正文

在PHP中为Null vs. False与0

如何解决《在PHP中为Nullvs.False与0》经验,为你挑选了5个好方法。

有人告诉我,好的开发人员可以当场/使用之间的区别Null,并False0所有的其他的好"一无所有"的实体.
什么区别,特别是在PHP?它与之有关===吗?



1> e-satis..:

它是特定于语言的,但在PHP中:

Null意思是" 没有 ".var尚未初始化.

False意味着" 在布尔上下文中不是真的 ".用于明确显示您正在处理逻辑问题.

0是一个int.与上面的其余部分无关,用于数学.

现在,有点棘手的是,在像PHP这样的动态语言中,它们都在布尔上下文中有一个值,(在PHP中)False.

如果你测试它==,它正在测试布尔值,所以你会得到相等.如果你测试它===,它将测试类型,你将得到不平等.

那他们为什么有用呢?

好吧,看看strrpos()功能.如果没有找到任何内容,则返回False,如果在字符串的开头找到了某些内容,则返回0!


当然,如果你处理国家:

你想在DebugMode = False(设置为关闭),DebugMode = True(设置为打开)和DebugMode = Null(根本不设置,将导致硬调试;-) 之间产生差异.


关于Null的注意事项:PHP使用它作为"没有价值",但这不是一个好习惯.通常,Null表示"未知值",其不同于"无值"或"未初始化变量".没有加1是1,而未知值加1是未知值.请记住,应用于null的任何运算符都将(应该)导致null,因为对"未知值"的任何操作都会导致未知值.
请记住,这只是**意图**.与现实中发生的事情无关.实际上,函数可以为不存在的值(例如strpos,input_filter)返回false,对于失败则返回null(例如input_filter).所以答案是,在阅读了特定的函数文档后,使用=== false和/或=== null.
@Eli:你在哪里知道Null一般意味着"未知价值".我想不出任何计算机语言,这是真的,也不是说英语,至少不是根据我能找到或听到的任何定义.也许你知道我不知道的事情?
@iconoclast - 我从数据库世界中获取它.据我了解,null用作数据库的占位符,该数据值在数据库中不存在或未知.请参阅http://dev.mysql.com/doc/refman/5.0/en/working-with-null.html或http://en.wikipedia.org/wiki/Null_%28SQL%29.

2> gcb..:

nullnull.falsefalse.伤心但真实.

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)


在我的opionion 0 == null是absolut废话,因为0是一个值,null是一个标志,表明该变量未初始化.谢谢php团队
在php中真正奇怪的是:null <-1 => TRUE

3> KristCont..:

以下是一个例子:

            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 中类型比较的更多参考,请参阅此内容.它应该让你清楚地了解.



4> Orion Adrian..:

False,Null,Nothing,0,Undefined等等.

这些中的每一个都具有与实际概念相关的特定含义.有时,多个含义会重载到单个关键字或值中.

CC++NULL,False0重载到相同的值.在C#中,它们是3个不同的概念.

nullNULL通常表示缺乏价值,但通常没有说明原因. 0表示自然数为零,并且类型等价于1,2,3等,并且在支持单独概念的语言中,NULL应仅处理一个数字.

错误表示不真实.它用于二进制值.这并不意味着未设置,也不意味着0.它只是表示两个二进制值之一.

没有任何东西可以表明该值被特别设置为什么都没有指示与null相同的东西,但是有意图.

某些语言中未定义表示尚未设置该值,因为没有代码指定实际值.



5> inkredibl..:

在PHP中,您可以使用===和!==运算符来检查值是否相等以及它们的类型是否匹配.因此,例如:0 == falsetrue,但是0 === falsefalse.这同样适用于!=!==.此外,如果您null使用上述运算符与其他两个进行比较,则期望得到类似的结果.

现在在PHP中,这种值的质量通常在返回有时可能为0(零)的值时使用,但有时可能是函数失败.在PHP的这种情况下,您返回false,您必须使用身份运算符检查这些情况===.例如,如果您正在搜索另一个字符串中的一个字符串并且您正在使用strpos()此函数,则此函数将返回数字位置,如果在最开始找到该字符串,则该数字位置可以为0,但如果找不到该字符串,则所有,然后strpos()将返回false,你必须在处理结果时考虑到这一点.

如果您将在函数中使用相同的技术,那么熟悉标准PHP库的任何人都将了解正在发生的事情以及如何检查返回的值是否是想要的或者在处理时发生了一些错误.对于函数参数实际上也是如此,你可以根据它们是数组还是字符串或者不是它来处理它们,并且这种技术在整个PHP中也被大量使用,所以每个人都会很容易地得到它.所以我猜这就是力量.

推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有