Странный вопрос о выводе эха - PullRequest
1 голос
/ 02 сентября 2011

Посмотрите на код ниже

echo "$_SERVER['HTTP_HOST']";

он показывает 'Ошибка разбора', в то время как следующий показывает нормально

$str = $_SERVER['HTTP_HOST'];
echo "$str";

Это было очень странно для меня.

Ответы [ 5 ]

3 голосов
/ 02 сентября 2011

чтобы ссылаться на ассоциативный массив внутри строки, вы должны либо добавить фигурные скобки, либо удалить кавычки:
и

echo "{$_SERVER['HTTP_HOST']}";
echo "$_SERVER[HTTP_HOST]";

будет работать

http://php.net/manual/en/language.types.string.php <- <strong>чрезвычайно полезное чтение

0 голосов
/ 02 сентября 2011

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

$ar = array("key" => "val");
echo "$ar['key']"; // won't work
echo "$ar[0]"; // will work because the key is not a string

В любом случае, как уже говорили другие, лучшее решение - заключить вашу переменную в фигурные скобки:

echo "{$ar['key']}"; 
0 голосов
/ 02 сентября 2011

Как вы обнаружили, обращение к переменным внутри строкового литерала подвержено ошибкам и его следует избегать.Отделите строковые литералы от переменных и по возможности используйте одинарные кавычки:

echo 'Host: header: ' . $_SERVER['HTTP_HOST'] . "\n";

Если вы действительно хотите использовать сложные выражения переменных внутри строковых литералов (и вы не должны't!), удалите внутренние кавычки:

echo "Host header: $_SERVER[HTTP_HOST]";

или заключите переменную ссылку в фигурные скобки:

echo "Host header: {$_SERVER['HTTP_HOST']}";
0 голосов
/ 02 сентября 2011

в этом случае вы должны использовать скобку, чтобы указать диапазон переменных в строке

echo "{$_SERVER['HTTP_HOST']}";

см. Также http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.double

0 голосов
/ 02 сентября 2011

это должно быть

echo $_SERVER['HTTP_HOST'];

, если вы хотите вывести $_SERVER['HTTP_HOST'], экранировать этот знак доллара

echo "\$_SERVER['HTTP_HOST']";

или поместить его в одинарную кавычку

echo '$_SERVER["HTTP_HOST"]';

Уточнение: вам не следует помещать в кавычки только переменные, если вы хотите содержимое фактической переменной, просто удалите эти кавычки, и это сработает

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