【问题标题】:PHP parser: braces around variablesPHP解析器:变量周围的大括号
【发布时间】:2012-07-10 21:57:07
【问题描述】:

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

$a = "foo";

那么它们之间有什么区别:

echo "${a}";

echo "{$a}";

也就是说,在任何情况下, 大括号外的美元符号而不是大括号内的美元符号 差异或结果总是相同(使用大括号 对任何东西进行分组)?

【问题讨论】:

  • 根据您之前的问题,您似乎有大括号 {c}{o}{m}{p}{l}{e}{x}

标签: php


【解决方案1】:

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

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

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

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

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

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

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

【讨论】:

  • 我已经看到,在许多编码风格中,为了保持一致性,${var} 的形式已被弃用并且永远不会被允许。检查 Zend 编码风格#Variable Substitution
  • @Fabio 对我来说听起来不错;我会完全避免${}。我也会避免{},除非有必要的情况(多维数组访问、方法调用、对象运算符链接)。
【解决方案2】:

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

$a = "hi!"

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

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

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

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

${'a'}

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

【讨论】:

  • echo "{$a}foo"; 应该与echo "${a}foo"; 产生相同的结果,花括号不会回显到屏幕上。
【解决方案3】:

您也可以使用 braces 将 Char 置于字符串 $text 的位置 $i

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

echo $text{$i}; // f

【讨论】:

    猜你喜欢
    • 2014-05-31
    • 2019-03-29
    • 1970-01-01
    • 2021-10-25
    • 2018-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    相关资源
    最近更新 更多