在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
,它只能有一个可能的值:null
。null
通常用作占位符值,表示"无值"。但是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
,以获得完全相同的效果