1

我正在使用PHP 7.1.11

如 PHP 手册中所述:

Heredocs 不能用于初始化类属性。自 PHP 5.3 起,此限制仅对包含变量的 heredocs 有效。

上面这句话是说,自PHP 5.3起,类属性不能使用 heredoc 语法进行初始化。

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

为什么这样?

考虑我下面的工作代码:

<!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
4

1 回答 1

3

正如您的消息来源已经指出的那样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 [...]

笔记

这个“问题”不是来自 heredocs。您不能将任何类属性初始化为函数或变量的结果。在没有heredoc的情况下尝试一下:

class foo {

  public $bar = $test;
}

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

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

于 2017-11-18T18:37:30.757 回答