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


PHP: Assigning of NULL to variable, TRUE or FALSE ? What is NULL?

在PHP中:

$var = NULL;

这里发生了什么?是NULL分配给$var,还是$var创建未知值,因为分配NULL没有任何作用?

考虑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并不完全一致。

我的问题是:我的逻辑出了什么问题?
$var = NULL;

这里发生了什么?

Simple:将值null赋给$var

是,null是一个值。一个正常的值。null不是一个布尔值,不是一个数字,也不是其他任何东西。null的类型是null,它只能有一个可能的值:nullnull通常用作占位符值,表示"无值"。但是null本身就是一个完全正常的值和类型。这里没什么可看的,继续。

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

这里null在第一次迭代时被赋值给$arr[$i]。然后赋值表达式本身返回赋值,即($arr[$i] = NULL)求值为null。然后,for循环计算null以决定是否继续,并且由于null被认为等于false,因此它停止。这个循环的结果是:

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

。第一个也是唯一一个索引为null的数组。不多不少。

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

这是你唯一的误解。赋值表达式的结果是赋值的。不是true。这就是为什么它可以工作:

$a = $b = $c;

$a被赋值$b = $c的结果,即$c

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