【发布时间】:2014-05-15 09:44:03
【问题描述】:
在 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: 赋值
=运算符将返回执行后赋值给变量的表达式的结果。所以这就是为什么你会在一个数组中得到你的元素。 2:for循环中的第二个表达式总是被视为布尔表达式,因此,它的结果将根据 PHP 的类型杂耍与true进行检查。这就是为什么你会得到for条件将被打破的原因(与 null 相比,true 会给出 false)。