Почему PHP не запрещает мне инициализировать свойства класса с использованием синтаксиса heredoc?

я использую 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

0

Решение

Как ваш источник уже указывает 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;

Выполнение этого кода выдает точно такую ​​же ошибку.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]