访问HEREDOC中数组的类属性

Nic*_*ick 6 php heredoc

下面的示例中有两种不同的语法.一个工作,另一个不工作!实际上我希望它反过来.第二种语法对我来说看起来很糟糕.

<?php
class Vodoo
{
    public $foo = array();

    public function __construct()
    {
        $this->foo = array('one' => 1, 'two' => 2, 'three' => 3);
    }

    public function getFoo()
    {
        $return = <<<HEREDOC
<p>$this->foo[one]</p>      // outputs: "Array[one]"
<p>{$this->foo['two']}</p>  // outputs correct: "2"

HEREDOC;
        return $return;
    }
}
$bar = new Vodoo;
echo $bar->getFoo();
?>
Run Code Online (Sandbox Code Playgroud)

是否可以使用这些花括号并引用HEREDOC内的关联索引?

编辑:花括号内的表达式必须以它出现在字符串外面的方式编写!

Arn*_*anc 7

是的,这是有效的.

在heredocs和双引号字符串中,您可以使用语法{$...},其中...有一个有效的PHP表达式$.

例如,这类似于#{...}Ruby中的语法.

文档中有一个例子:http://php.net/manual/en/language.types.string.php#example-71

查看复杂的卷曲语法

  • 是的,这是正常的,这是正确的语法.您可以将所有内容放在`{...}`中,前提是它以`$`开头.在`$ foo [bar]`中,`bar`是一个常量,这只是因为PHP假定它的值为`bar`.所以,请改用`$ foo ['bar']`. (2认同)