PHP解析器:围绕变量

Joh*_*che 6 php

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

$a = "foo";
Run Code Online (Sandbox Code Playgroud)

然后有什么区别:

echo "${a}";

echo "{$a}";
Run Code Online (Sandbox Code Playgroud)

也就是说,是否有任何情况下美元符号在大括号外面而不是在大括号内的位置会产生差异,或者结果总是相同(用括号组合几乎任何东西)?

Exp*_*lls 8

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

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

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

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

$y = 'x';
$x = 'hello';
echo "${$y}"; //hello
Run Code Online (Sandbox Code Playgroud)

$$句法不会串插,使${}必要的内插.您还可以使用strings(${'y'})甚至在${}块中连接.但是,变量变量可能被认为是一件坏事.

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


Why*_*ugo 4

方括号界定变量名的结束位置;这个例子应该是不言而喻的。

$a = "hi!"

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

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

echo "{$a}foo";  //hi!foo
Run Code Online (Sandbox Code Playgroud)

另外,这应该发出警告;你应该使用

${'a'}
Run Code Online (Sandbox Code Playgroud)

否则它将尝试假设a是一个常数。