为什么 PHP 不禁止我使用 heredoc 语法初始化 class 属性?

Why PHP is not forbidding me from initializing class properties using heredoc syntax?

我正在使用 PHP 7.1.11

如 PHP 手册中所述:

Heredocs can not be used for initializing class properties. Since PHP 5.3, this limitation is valid only for heredocs containing variables.

上面的句子是说 class 属性不能使用 heredoc 语法初始化,因为 PHP 5.3.

我正在使用 PHP 7.1.11 并使用 heredoc 语法初始化 class 属性 但我没有收到任何错误并且 class 属性 已初始化。

为什么会这样?

考虑我下面的工作代码:

<!DOCTYPE HTML>
<html>
  <head>
    <title>Example</title>
  </head>
  <body>
  <?php
    class foo {
      public $bar = <<<EOT
                    barti
EOT;
    }

    $j = new foo();
    echo $j->bar;
  ?>
  </body>
</html>

以上代码的输出是

barti

正如您的消息来源已经指出的那样 since PHP 5.3, this limitation is valid only for heredocs containing variables。您的示例代码不包含任何变量,因此它按设计工作。


但是,不起作用 是在 heredoc 中使用变量,如下所示:

    class foo {
      public $bar = <<<EOT
                    barti $someVariable // nor does {$someVariable}
EOT;
    }

    $j = new foo();
    echo $j->bar;

这会引发错误:

Fatal error:  Constant expression contains invalid operations in [...]

注意

这个'issue'不是来自heredocs。您不能将任何 class 属性 初始化为函数或变量的结果。不用 heredoc 试试看:

class foo {

  public $bar = $test;
}

$j = new foo();
echo $j->bar;

执行此代码会引发完全相同的错误。