【问题标题】:PHP: Assigning of NULL to variable, TRUE or FALSE ? What is NULL?PHP:将NULL分配给变量,TRUE或FALSE?什么是空值?
【发布时间】: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)。

标签: php null


【解决方案1】:
$var = NULL;

这里发生了什么?

简单:将值null 分配给$var

是的,null 是一个值。一个常规的、正常的值。 null 不是布尔值,不是数字,也不是其他任何东西。 nullnull 类型,它只能取一个可能的值: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 以获得完全相同的效果。

【讨论】:

  • 谢谢!我认为真正让我感到困惑的是 PHP 文档中关于 for 循环的内容:“在每次迭代开始时,都会计算 expr2。如果计算结果为 TRUE,则循环继续”。我一直认为是赋值的成功使评估为 TRUE,但您是说只要要分配的值评估为 TRUE,则表达式为 TRUE(假设表达式的其余部分是有效的 PHP) .这很有道理。
  • 是的,这都是关于表达式的。您可以在其中有一个可笑的长、复杂、嵌套的 表达式for 循环只关心最终结果的计算结果,它对你给出的表达式没有任何特定的偏好。
猜你喜欢
  • 1970-01-01
  • 2022-10-05
  • 1970-01-01
  • 2018-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-06
  • 2020-11-23
相关资源
最近更新 更多