PHP:为变量赋值NULL,TRUE还是FALSE?什么是NULL?

时间:2014-05-15 09:44:04

标签: php null

在PHP中:

$var = NULL;

这里发生了什么?是否为$ var分配了NULL,或者是因为分配NULL什么都没有,因此使用未知值创建$ var?

考虑一个for循环

$arr=array();
for($i=0;$arr[$i]=NULL;$i++){}

确实在这种情况下打破了。这必须意味着NULL的赋值被计算为FALSE,这意味着赋值永远不会发生并且$ arr [0]的值未确定。 var_dump只会给出

array(1) { [0]=> NULL }

但我从来不知道该怎么做。从我对上面的for循环的推理,我会假设PHP中的NULL意味着"未确定",但直到现在我一直认为NULL是一种可以分配的类型。如果实际上可以分配NULL,则for循环不应该因为NULL的赋值为TRUE而中断。

读取http://php.net/manual/en/types.comparisons.php似乎NULL以某种方式确定,因为NULL和array()的严格比较为FALSE,这很好,但是松散比较为TRUE。对我来说,这意味着NULL实际上是某种东西而不是未确定的。

在我看来,NULL并不完全一致。

我的问题:我的逻辑出了什么问题?

1 个答案:

答案 0 :(得分:2)

$var = NULL;
     

这里发生了什么?

简单:值null已分配给$var

是的,null是一个值。一个正常的,正常的值。 null不是布尔值,不是数字,不是其他任何内容。 null类型为null,只能使用一个可能的值:nullnull通常用作占位符值,表示“无价值”。但null只是一个完全正常的值并且本身就是类型。没什么好看的,继续前进。

for ($i = 0; $arr[$i] = NULL; $i++) { }

此处null在第一次迭代时分配给$arr[$i]。赋值表达式本身然后返回指定的值,即($arr[$i] = NULL)计算值nullfor循环然后评估此null以决定是否应该继续,并且由于null被视为等于false,它会停止。这个循环的结果是:

array(1) { [0]=> NULL }

即。一个数组,其第一个和唯一的索引是值null。没什么,没什么。

  

如果实际上可以分配NULL,则for循环不应该中断   因为NULL的赋值是TRUE。

这是你唯一的误解。赋值表达式的结果是指定值。不是true。这就是为什么这样做的原因:

$a = $b = $c;

$a被分配了$b = $c的结果,即$c

在所有这些示例中,您可以将null替换为false以获得完全相同的效果。