PHP - "Undefined offset"错误不一致性问题

4

为什么PHP在这里会抛出“Notice: Undefined offset”错误:

<?php
$MyVar = array();
echo $MyVar[0]; //Notice: Undefined offset: 0
?>

但不是在这里:

<?php
$MyVar = false;
echo $MyVar[0]; //No error
?>

1
这是由于变量类型的原因。由于数组具有偏移量,但布尔值没有,因此偏移量不是未定义的,而是简单地为 NULL。同样的偏移量通知也适用于字符串 $MyVar = ''; echo $MyVar[0]; 这将导致 未初始化的字符串偏移量: 0 - Will B.
@fyrye 我试图引用布尔值的偏移量,这应该更加理由抛出一个错误/警告/通知。 - user3163495
参见:http://php.net/manual/en/language.types.string.php#example-55。使用[]或{}访问其他类型变量(不包括实现适当接口的数组或对象)会默默地返回NULL。这意味着PHP希望您在使用`[]`或`{}`访问变量之前验证其类型,例如:`if (is_array($MyVar))`。 - Will B.
@fyrye 把那个放在答案里,我会标记它为已接受。 - user3163495
2个回答

0

这是因为在你的第二个例子中,$MyVar[0] 是 null,这不是一个错误。你可能会引用 $MyVar[0][1][2][3] 并得到相同的结果。

第一个例子不是 null,而是数组中缺少索引,所以它会警告你。


第一个例子确实会输出NULL,但也会抛出一个错误。尝试运行第一个例子,你会看到"Notice: Undefined offset"后面跟着"NULL"。 - user3163495
这是有道理的,因为PHP专门查找未定义的索引。请注意,这不是错误,而是通知。 - Matt

0

当数组中没有值并且您尝试引用未初始化的索引时,会提供未定义的偏移量。

在第二个代码的情况下,您已经为变量分配(初始化)了一个与variable [0]不同的值。

如果您为第一个示例中的前两个索引分配值,并引用第三个索引,则应该会出现未定义的偏移量错误。

我认为这不是关于null还是不是,而是关于为索引分配值的情况。如果您采用C语言,数组相当于malloc(在一定程度上)。感谢PHP不会崩溃,只会抛出未定义的索引[偏移量]错误


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接