一个关于回声输出的奇怪问题

时间:2011-09-02 11:37:30

标签: php echo

查看下面的代码

echo "$_SERVER['HTTP_HOST']";

显示'解析错误',而下一个显示确定

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

这对我来说很奇怪。

5 个答案:

答案 0 :(得分:3)

要引用字符串内的关联数组,您必须添加花括号或删除引号:
两个

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

会起作用

http://php.net/manual/en/language.types.string.php< - 非常有用的阅读

答案 1 :(得分:0)

应该是

echo $_SERVER['HTTP_HOST'];

如果您想输出$_SERVER['HTTP_HOST'],请转义该美元符号

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

或将其放入单引号

echo '$_SERVER["HTTP_HOST"]';

澄清:如果你想要实际变量的内容,你不应该只将变量放入引号,只需删除这些引号就行了

答案 2 :(得分:0)

正如您所发现的,引用字符串文字中的变量容易出错,应该避免使用。将字符串文字与变量分开,并尽可能使用单引号:

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

如果确实想在字符串文字中使用复杂的variable expressions(你不应该!),请删除内部引号:

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

或围绕花括号内的变量引用:

echo "Host header: {$_SERVER['HTTP_HOST']}";

答案 3 :(得分:0)

在这种情况下,您应该使用括号指出字符串

中的变量范围
echo "{$_SERVER['HTTP_HOST']}";

另见 http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.double

答案 4 :(得分:0)

如果在双引号字符串中检测到变量,它将自动转换为它的字符串值。但这不是你的每一个案例。你的数组的键也是一个字符串的事实与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']}";