Доступ к массивам без цитирования ключа - PullRequest
3 голосов
/ 08 октября 2010

Я могу получить доступ к значению массива с помощью $array[key] или $array['key']

Есть ли причина избегать использования одного над другим?

Ответы [ 3 ]

6 голосов
/ 08 октября 2010

Используйте последний вариант $array['key'].Первый будет работать только потому, что PHP толерантен и принимает строковое значение key, если нет константы с именем key :

Всегда используйте кавычки вокруг индекса строкового литерального массива.Например, $foo['bar'] является правильным, а $foo[bar] - нет.[…] Это неправильно, но это работает.Причина в том, что этот [...] имеет неопределенную константу (bar), а не строку ('bar' - обратите внимание на кавычки).

См. Также Массив do'sand don'ts .

Теперь, в отличие от доступа к массивам в простом коде PHP, при использовании парсинга переменных в строках с двойными кавычками вам действительно нужно писать его без кавычекили используйте синтаксис фигурных скобок :

[…] внутри строки в двойных кавычках, допустимо не окружать индексы массива кавычками, поэтому "$foo[bar]" допустимо.См. Приведенные выше примеры для получения более подробной информации о причинах, а также раздел, посвященный разбору переменных в строках.

Итак:

// syntax error
echo "$array['key']";

// valid
echo "$array[key]";
echo "{$array['key']}";
2 голосов
/ 08 октября 2010

PHP выдаст предупреждение для версии без кавычек ($array[key]), если не определена постоянная с именем key, и тихо преобразует ее в $array['key']. Подумайте о том, что у вас возникнет проблема с отладкой кода, если у вас что-то будет:

$array['foo'] = 'baZ'
echo $array[foo];
echo $array['foo'];
echo "$array[foo]";
echo "{$array['foo']}";
echo "{$array[foo]}";

define('foo', 'baR');
echo $array[foo];
echo $array['foo'];
echo "$array[foo]";
echo "{$array['foo']}";
echo "{$array[foo]}";

Попробуйте их и посмотрите, но убедитесь, что у вас включены предупреждения (error_reporting(E_ALL) и display_errors(1))

0 голосов
/ 08 октября 2010

$array[key] неверное использование. В этом случае ключ будет обрабатываться как константа (то есть через define ()) вместо строки. В случае, когда константа с именем key отсутствует, PHP будет предполагать, что вы имеете в виду «ключ», «исправляете» его и выдает предупреждение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...