在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并不完全一致。
我的问题:我的逻辑出了什么问题?
答案 0 :(得分:2)
$var = NULL;
这里发生了什么?
简单:值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
以获得完全相同的效果。