6

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

$a = "foo";

那么有什么区别:

echo "${a}";

echo "{$a}";

也就是说,是否存在将美元符号放置在大括号外而不是大括号内的任何情况,或者结果总是相同的(大括号用于对任何东西进行分组)?

4

3 回答 3

8

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

我更喜欢插值而不是串联,并且我更喜欢在不需要时省略大括号。有时,他们是。

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

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

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

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

对于数组,任何一个都可以${foo['bar']}{$foo['bar']}. 我更喜欢$foo[bar](仅用于插值 - 在该上下文中,字符串外部bar将被视为常量)。

于 2012-07-10T22:04:38.580 回答
4

括号分隔变量名的结束位置;这个例子不言自明。

$a = "hi!"

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

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

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

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

${'a'}

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

于 2012-07-10T22:00:58.990 回答
1

您也可以使用大括号将 Char 置于$istring的位置$text

$i=2;
$text="safi";

echo $text{$i}; // f

于 2016-11-01T13:31:17.100 回答