PHP解析器:围绕变量

时间:2012-07-10 21:57:07

标签: php

我想知道,如何精确定义大括号的语义 在PHP里面?例如,假设我们已定义:

$a = "foo";

然后有什么区别:

echo "${a}";

echo "{$a}";

也就是说,是否有任何情况下放置 在大括号外的美元符号而不是在大括号内 差异或结果始终相同(使用大括号 几乎可以分组?

3 个答案:

答案 0 :(得分:8)

大括号有很多可能性(例如省略它们),在处理对象或数组时事情变得更加复杂。

我更喜欢插值连接,我更喜欢在没有必要时省略括号。有时,他们是。

您不能使用${}语法的对象运算符。调用方法或链接运算符时必须使用{$...}(如果只有一个运算符,例如获取成员,则可省略大括号)。

${}语法可用于变量变量:

$y = 'x';
$x = 'hello';
echo "${$y}"; //hello

$$语法不会在字符串中进行插值,因此插值需要${}。您还可以使用字符串(${'y'}),甚至可以在${}块中连接。但是,变量变量可能被认为是一件坏事。

对于数组,要么${foo['bar']}{$foo['bar']}一致。我更喜欢$foo[bar](仅用于插值 - 在字符串bar之外将被视为该上下文中的常量)。

答案 1 :(得分:4)

括号分隔变量名称的结尾;这个例子应该说明一切。

$a = "hi!"

echo "$afoo";  //$afoo is undefined

echo "${a}foo";  //hi!foo

echo "{$a}foo";  //hi!foo

此外,这应该吐出警告;你应该使用

${'a'}

否则会尝试假设a是常数。

答案 2 :(得分:1)

您还可以使用大括号将Char置于字符串$i的{​​{1}}位置:

$text
$i=2;

$text="safi";