Насколько строгим является неопределенный индекс? - PullRequest
2 голосов
/ 07 февраля 2011

Я включил все отчеты об ошибках, чтобы очистить некоторые неопределенные индексы, просто чтобы сделать приложение, которое я делаю, более аккуратным.Я заметил странное поведение:

Допустим, у меня есть следующий массив: $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 Ответ

5 голосов
/ 07 февраля 2011

это из-за хитрого жонглирования.$ a ['test'] преобразуется в [пустую] строку, а затем 'никуда' преобразуется в 0, а затем PHP пытается найти символ 0 в пустой строке.Он становится операцией подстроки, а не поиском переменной, поэтому ошибка не возникает.

Ну и дела, мужчина говорит то же самое: 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 приведения типов, что приводит к такому результату.
(Подсказка: бедняга, задававший этот вопрос, зарегистрировал глобальные глобалы)

...