я использую PHP 7.1.11
Как упомянуто в руководстве по PHP:
Heredocs нельзя использовать для инициализации свойств класса. С PHP
5.3, это ограничение действительно только для heredocs, содержащих переменные.
В приведенном выше предложении говорится, что свойства класса не могут быть инициализированы с использованием синтаксиса heredoc, поскольку PHP 5.3.
Я использую 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
Как ваш источник уже указывает 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 [...]
НОТА
Эта «проблема» не исходит от наследственников. Вы не можете инициализировать любое свойство класса результатом функции или переменной. Просто попробуйте без heredoc:
class foo {
public $bar = $test;
}
$j = new foo();
echo $j->bar;
Выполнение этого кода выдает точно такую же ошибку.
Других решений пока нет …