为什么PHP不禁止我使用heredoc语法初始化类属性?
我使用的是PHP7.1.11 如PHP手册中所述: Heredocs不能用于初始化类属性。自PHP以来 5.3,此限制仅适用于包含变量的遗传 上面这句话是说类属性不能用herdoc语法初始化,因为PHP5.3 我正在使用PHP7.1.11,并使用heredoc语法初始化类属性,但没有得到任何错误,并且类属性已初始化 为什么会这样 考虑我的以下工作代码:为什么PHP不禁止我使用heredoc语法初始化类属性?,php,class,heredoc,variable-initialization,class-properties,Php,Class,Heredoc,Variable Initialization,Class Properties,我使用的是PHP7.1.11 如PHP手册中所述: Heredocs不能用于初始化类属性。自PHP以来 5.3,此限制仅适用于包含变量的遗传 上面这句话是说类属性不能用herdoc语法初始化,因为PHP5.3 我正在使用PHP7.1.11,并使用heredoc语法初始化类属性,但没有得到任何错误,并且类属性已初始化 为什么会这样 考虑我的以下工作代码: <!DOCTYPE HTML> <html> <head> <title>Examp
<!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>
正如您的源代码已经指出的,自PHP5.3以来,此限制仅对包含变量的herdoc有效。您的示例代码不包含任何变量,因此它按设计工作
但是,不起作用的是使用heredoc中的变量,如下所示:
class foo {
public $bar = <<<EOT
barti $someVariable // nor does {$someVariable}
EOT;
}
$j = new foo();
echo $j->bar;
注意 这个“问题”并非来自于遗传。不能将任何类属性初始化为函数或变量的结果。只要不使用Herdeoc就可以尝试:
class foo {
public $bar = $test;
}
$j = new foo();
echo $j->bar;
执行此代码会引发完全相同的错误。
由于PHP5.3,此限制仅对包含变量的heredocs有效。
您的示例不包含变量,因此不计入上述限制。@ManuelMannhardt:您能用一些合适的工作代码示例来证明这一点吗?“包含变量的遗传”到底是什么意思?给我举一些这样的例子。@user2839497我想你要找的例子在这种情况下实际上是非工作代码。我发布了一个答案,其中也包含“非工作”代码。你的意思是当在类属性初始化中使用/s变量时,使用herdoc语法PHP会抛出致命错误吗?但是,如果一个普通变量是用herdeoc语法初始化的,那么PHP不会抛出任何错误吗?在这种情况下,变量(以及转义序列字符,如果有的话)将在heredoc标识符之间展开?这不是heredoc(唯一)的事情。不能只为变量或函数的结果设置属性。我会在回答中加上它
Fatal error: Constant expression contains invalid operations in [...]
class foo {
public $bar = $test;
}
$j = new foo();
echo $j->bar;