【问题标题】:PHP - Inconsistency with "Undefined offset" error [duplicate]PHP - 与“未定义的偏移量”错误不一致[重复]
【发布时间】:2023-04-01 22:01:01
【问题描述】:

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

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

但不在这里:

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

【问题讨论】:

  • 这是由于变量类型。由于数组有偏移量,但布尔值没有,所以偏移量不是未定义的,而是简单的NULL。相同的偏移量通知适用于字符串$MyVar = ''; echo $MyVar[0];,这将导致Uninitialized string offset: 0
  • @fyrye 我试图引用布尔值的偏移量应该是引发错误/警告/通知的更多原因
  • 参见:php.net/manual/en/language.types.string.php#example-55 Accessing variables of other types (not including arrays or objects implementing the appropriate interfaces) using [] or {} silently returns NULL. 这意味着 PHP 希望您在使用 []{} 访问它之前验证变量类型,例如if (is_array($MyVar))
  • @fyrye 将其放入答案中,我会将其标记为已接受

标签: php arrays undefined offset


【解决方案1】:

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

第一个示例不是 null,它是数组中缺少的索引,因此它会警告您。

【讨论】:

  • 第一个例子实际上回显了NULL,但也抛出了一个错误。试试第一个例子,你会看到“Notice: Undefined offset”后面跟着“NULL”
  • 这确实是有道理的,因为 PHP 专门寻找未定义的索引。请注意,这不是错误,而是通知。
【解决方案2】:

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

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

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

我不认为它是关于 null 与否,而是为索引分配值的情况。 如果你用 C 语言的话,数组相当于 malloc(在一定程度上)。幸好 PHP 没有崩溃,只是抛出一个未定义的 index[offset] 错误

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    • 2011-03-13
    • 1970-01-01
    • 2016-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多