Подтвердить что ты не робот

Можно ли использовать массив [ключ] в PHP?

Можно ли использовать массив без одинарной или двойной категории, например $array [key]? Я думал, что это плохо, потому что PHP сначала ищет константу, если я не использую ни одну, ни двойную цитату. Один из моих коллег сказал мне, что это не имеет значения.

Что вы, ребята, думаете?

4b9b3361

Ответ 1

Он не считается OK - даже если он будет работать в большинстве случаев.


В основном, когда PHP видит это:

echo $array[key];

Он будет искать константу, определенную с помощью define, называемой key - и, если их нет, если примет значение 'key'.


Но если в вашем коде есть что-то вроде этого:

define('key', 'glop');

Это не займет

echo $array['key'];

больше; вместо этого он будет использовать значение константы key - и ваш код будет таким же, как:

echo $array['glop'];


В конце концов, если не поставить кавычки вокруг имени ключа, это плохо по крайней мере по двум причинам:

  • Существует риск того, что он не будет делать то, что вы ожидаете - что очень плохо
    • Возможно, сегодня...
    • Но как насчет следующей недели/месяца/года?
    • Возможно, однажды вы будете define константой с неправильным именем; -)
  • Это не хорошо для производительности:
    • он должен искать константу, прежде чем использовать 'key'
    • И, как сказано в комментарии, он генерирует уведомления (даже если вы отключите error_reporting и display_errors, уведомления/предупреждения/ошибки все еще сгенерированы, даже если отброшены позже)

Итак: вы не должны слушать этого парня по этому поводу: он ошибается: это имеет значение.


И если вам нужно какое-то "доказательство", которое "лучше", чем то, что люди могут сказать вам о stackoverflow, вы можете указать его в этот раздел руководства, как ссылку: Почему $foo [bar] не так?

Ответ 2

Это не нормально, и чтобы добавить к словам других, это приведет к ошибке в большинстве случаев:

8 Notice Use of undefined constant key - assumed 'key' in file: 'index.php' on line 46

См. раздел в Руководство PHP для "Почему $foo [bar] не так?" в разделе "Array do and don'ts" на этой странице: http://php.net/manual/en/language.types.array.php

Ответ 3

Это неверно и будет автоматически определять константу:

$var = $array[bar];

Это использование верно:

$var = "string $array[bar] ...";

Для совместимости с PHP2 этот старый синтаксис по-прежнему разрешен в контексте строки. Цитирование ключа приведет к ошибке синтаксического анализа, если вы также не используете {фигурные скобки} вокруг него.

Ответ 4

Из Руководство PHP - Почему ошибка $foo [bar] неверна?

Всегда используйте кавычки вокруг индекса строкового литерала. Например, $foo ['bar'] верен, а $foo [bar] - нет. Но почему? В старых сценариях встречается такой синтаксис:

<?php
$foo[bar] = 'enemy';
echo $foo[bar];
// etc
?>

Это неправильно, но это работает. Причина в том, что этот код имеет константу undefined (bar), а не строку ( "bar" - отметьте кавычки). PHP может в будущем определять константы, которые, к сожалению, для такого кода имеют одно и то же имя. Это работает, потому что PHP автоматически преобразует голую строку (некорректную строку, которая не соответствует известному символу) в строку, содержащую голую строку. Например, если нет определенной константы с именем bar, тогда PHP будет заменять строку "bar" и использовать ее.

В руководстве вы найдете еще несколько примеров.

Ответ 5

плохая практика, чтобы не указывать ключевые значения по ряду причин:

  • Потенциальные столкновения со значимыми именами символов, такие как константы define 'd.
  • Некоторые клавиши не могут быть выражены без кавычек (например, ключ "]").
  • Плохие привычки могут укусить вас позже (а именно в отношении №1 и №2).
  • Производительность - поиск define требует времени.

Если вы хотите не печатать кавычки вокруг имен, которые являются стандартными элементами вещи, которую вы часто проходите, возможно, вам захочется использовать вместо этого объекты вместо синтаксиса object->property вместо $array["element"].

Ответ 6

Если ключ фактически не является константой, нет причин для того, чтобы вы не клали кавычки вокруг ключа.

Как работает PHP, он ищет постоянное значение того, что вы положили, но он принимает строковое представление, если константу не удается найти.

Если кто-то должен был отредактировать ваш код по дороге и добавить константу с этим ключевым именем, это просто вызовет больше головных болей.