未定义索引的严格程度如何?

时间:2011-02-07 15:58:17

标签: php multidimensional-array undefined-index

我已经打开所有错误报告来清理一些未定义的索引,只是为了让我的应用程序更加整洁。我注意到了一种奇怪的行为:

假设我有以下数组:$a = array('test' => false, 'foo' => 'bar')

如果我if ($a['nothere']),我会正确地收到Undefined index: nothere的通知。

但是,如果我if ($a['test']['nothere']),我不会收到通知。完全没有。尽管nothere绝对不是$a['test']中的索引。

现在,如果我执行$a['test'] = array('baz' => 'poof'),则运行if ($a['test']['nothere']) 发出通知。

未定义的索引检查是否检查空数组中的索引?这是在PHP 5.2.8上。

1 个答案:

答案 0 :(得分:4)

这是因为棘手的类型杂耍。 $ a ['test']被强制转换为[empty]字符串,然后'无处'被强制转换为0然后PHP尝试在空字符串中查找0的符号。它变为子串操作,而不是变量查找,因此,没有引发错误。

Gee,男人也这么说:http://php.net/manual/en/language.types.type-juggling.php

我的经历中的一个奇怪的例子:
通过超链接index.php?sname=p_edit&page=0请求代码

if (isset($_GET['sname'])) { $page['current'] = $_GET['sname'].'.php'; };
echo $page['current'];

只生成一个字母"p"

我计算了6个步骤和2个类型的演员表,结果是这样的结果 (提示:一个问这个问题的可怜的家伙已经注册了全球化)