查看下面的代码
echo "$_SERVER['HTTP_HOST']";
显示'解析错误',而下一个显示确定
$str = $_SERVER['HTTP_HOST'];
echo "$str";
这对我来说很奇怪。
答案 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']}";