Этот вопрос заставил меня задуматься о простых струнах.
Когда PHP видит строку, которая не заключена в кавычки, она сначала проверяет, является ли она константой. Если нет, это просто предполагает, что это строка и продолжается в любом случае. Так, например, если у меня есть
echo $foo[bar];
Если существует постоянная вызываемая полоса, она использует это для ключа массива, но если нет, тогда он рассматривает бар как голую строку, поэтому он ведет себя так же, как
echo $foo["bar"];
Это может вызвать всевозможные проблемы, если в какой-то будущий день константа добавляется с тем же именем.
Мой вопрос в том, есть ли какая-то ситуация, когда на самом деле имеет смысл использовать голую строку?
Нет, я не вижу ни одного примера, где это имеет смысл, и это всегда опасно. Использование строк без кавычек должно быть абсолютно зарезервировано для адресации констант. Я не понимаю, как изобретатели PHP могли решить ввести это нелепое поведение вообще – он делает правильное использование констант почти невозможным (потому что, если вы попытаетесь получить доступ к константе, которая не была определена, PHP будет молча и глупо генерировать строка), не принося никакой пользы.
Это, скорее всего, не считается законным, но твиновская концепция MVC- оболочки моего друга TweetMVC избегает цитат в нескольких местах, чтобы сжать еще несколько символов, например:
foreach(c('mod')as$f)require"t/$f.php";@list($c,$m,$a)=explode('/',@$_GET[r],3);$c=$c?:c('dc');$o=(@include"c/$c.php")?@new$c($m,$a):e(1)
Единственный раз, когда вы использовали бы голую строку в качестве ключа, – если она была ранее использована в define()
для константы.