$a['b'] = "aaaaaaaaa"; echo "$a['b']"; 报错

  
<?php 
$a['b'] = "aaaaaaaaa";
echo "$a['b']";
?>

运行报错Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING

刘锡涛
刘锡涛
281
编辑于2012-08-27
该问题已经在2012-08-28被关闭

参与关闭投票者: 冯义军 , 浪际天涯 , 刘锡涛

关闭原因:灌水刷分或入门级问题
提问者未做功课与认真研究,有灌水刷分的嫌疑或属于入门级问题(缺乏知识性,只涉及简单事实与信息)。徳问的目标是成为一个能够为编程难题提供高效解答的社群,由专家驱动,用户没有精力和意愿回答此类问题。内容水化会导致社群偏离目标,因此请勿提问那些容易从搜索引擎、技术手册上获取答案的入门级问题。提一个好的问题至关重要,详读提问的艺术

评论 (0)链接2012-08-27 

我个我来说说原因吧,至于怎么用相信你也知道,大家也说了很多。

问题就是双引号在解析数组变量时的过程,首先双引号在解析变量时如果引号里的字符串有变量,则会将会用变量的值进行替换。但是单引号不会,但是要知道,PHP在解析双引号里的数组时(特别是关联数组)是不能将键带上引号的,因为这会导致PHP认不到这个数组变量,也就是说:"$a[0]"和"$a[b]"都是可以被解析的,"$a[b]"在解析时会先去常量符号表里查询b常量,当没有b常量时会去变量符号表里查询'b',所以能正确解析,但是当为数组常量加上引号时,PHP就会抛出语法异常,所以就出现错误了。所以,你如果一定要用双引号就把变量加上{}吧,建议你分开来写,然后用.连接,这样有助于代码的可读性。

该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (0)链接 • 2012-08-27

如果你想输出字符串$a["b"],你可以这样来写:

  
<?php 
$a['b'] = "aaaaaaaaa";
echo '$a["b"]';
?>

如果你想输出数据中$a["b"]的值,可以这样来写:

  
<?php 
$a['b'] = "aaaaaaaaa";
echo $a["b"];
?>

关于php中双引号和单引号的区别,简单的说就是单引号内部的变量不会执行,双引号里的变量会执行。具体可以去百度一下。

该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (0)链接 • 2012-08-27

可以看一下手册中关于“字符串”解析的那一节
关于简单变量解析有这一句话:
“如果遇到美元符号($),解析器会尽可能多地取得后面的字符以组成一个合法的变量名。如果想明示指定名字的结束,用花括号把变量名括起来。”
其中有这个的解释

  
// Works but PHP looks for a constant named banana first
// as described below.
echo "A banana is {$fruits[banana]}.";

// Won't work, use braces. This results in a parse error.
echo "A banana is $fruits['banana'].";
该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (0)链接 • 2012-08-27

避免歧义,这样用吧。

  
echo "{$a['b']}";
该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (0)链接 • 2012-08-27
德问是一个专业的编程问答社区,请 登录注册 后再提交答案