Можно ли использовать массив без одиночной или двойной котировки, такой как $ array [key]? Я думал, что это плохо, потому что PHP сначала ищет константу, если я не использую ни одну, ни двойную цитату. Один из моих коллег сказал мне, что это не имеет значения.
Ребята, что вы думаете?
Это не считается ОК – даже если он будет работать в большинстве случаев.
В основном, когда 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] неверна?
Это нехорошо и добавить к тому, что говорили другие, это вызовет ошибку в большинстве случаев:
8 Notice Use of undefined constant key - assumed 'key' in file: 'index.php' on line 46
См. Раздел в Руководстве по PHP для «Почему ошибка в $ foo [bar]?» в разделе «Array do's and don'ts» на этой странице: http://php.net/manual/en/language.types.array.php
Из руководства PHP – Почему $ foo [bar] не так?
Всегда используйте кавычки вокруг индекса строкового литерала. Например, $ foo ['bar'] верен, а $ foo [bar] – нет. Но почему? В старых сценариях встречается такой синтаксис:
<?php $foo[bar] = 'enemy'; echo $foo[bar]; // etc ?>
Это неправильно, но это работает. Причина в том, что этот код имеет неопределенную константу (bar), а не строку («bar» – заметьте кавычки). PHP может в будущем определять константы, которые, к сожалению, для такого кода имеют одно и то же имя. Это работает, потому что PHP автоматически преобразует голую строку (некорректную строку, которая не соответствует известному символу) в строку, содержащую голую строку. Например, если нет определенной константы с именем bar, тогда PHP будет заменять строку «bar» и использовать ее.
В руководстве вы найдете еще несколько примеров, которые вы можете проверить.
Это неверно и будет автоматически определять константу:
$var = $array[bar];
Однако это использование верно:
$var = "string $array[bar] ...";
Для совместимости с PHP2 этот старый синтаксис по-прежнему разрешен в контексте строки. Цитирование ключа приведет к ошибке синтаксического анализа, если вы также не используете {фигурные скобки} вокруг него.
Если ключ фактически не является константой, нет причин для того, чтобы вы не клали кавычки вокруг ключа.
Как работает PHP, он ищет постоянное значение того, что вы положили, но он принимает строковое представление, если константу не удается найти.
Если кто-то должен был отредактировать ваш код по дороге и добавить константу с этим ключевым именем, это просто вызовет больше головных болей.
Плохая практика не цитировать ключевые значения по ряду причин:
define
констант d. "]"
). define
требует времени. Если вы хотите избежать ввода котировок вокруг имен, которые являются только стандартными элементами того, что вы проходите много, возможно, вам захочется использовать объекты вместо этого, которые вместо синтаксиса $array["element"]
синтаксис $array["element"]
.