1

我有一段时间没有使用 PHP,但我尝试过这样的事情:

<?php

class Something {
    public $x = 2 * 3;   // (line 4)
}

此代码触发以下错误:

[2013 年 2 月 13 日星期三 17:43:56] [错误] [客户端 127.0.0.1] PHP 解析错误:语法错误,意外的 '*',期待 ',' 或 ';' 在 /var/www/problem.php 第 4 行

PHP文档

这个初始化必须是一个常数值——也就是说,它必须能够在编译时被评估,并且不能依赖于运行时信息才能被评估。

因此,根据文档,我的代码应该可以工作。我在这里缺少什么吗?

4

4 回答 4

8

声明类的成员时,您可以为它们分配值,但不能执行数学或函数调用等复杂操作。

<?php

class Something {
    public $x = 2 * 3;   // (line 4)
}

可:

<?php

class Something {
    public $x = 6;   // (line 4)
}

因此,在您的情况下,您将希望在构造函数中初始化该值。

<?php

class Something {
    public $x; 

    public function __construct() 
    {
        $this->x = 2 * 3;
    }  
}
于 2013-02-13T15:52:15.173 回答
3

如果您真的仔细阅读了示例中链接到的文档,它清楚地表明这是不允许的:

class SimpleClass
{
    // invalid property declarations:
    // (some examples here)
    public $var3 = 1+2;
}

这意味着乘法也不起作用。

于 2013-02-13T15:53:17.563 回答
2

因此,根据文档,我的代码应该可以工作。

文档明确指出:“它必须能够在编译时进行评估,并且不能依赖于运行时信息”

2 * 3是运行时评估。

public $x = 6;应该管用。

于 2013-02-13T15:52:24.713 回答
0

2 * 3不允许运行时评估。

正如DOCS所说

这个声明可能包括一个初始化,但这个初始化必须是一个常量值——也就是说,它必须能够在编译时被评估,并且不能依赖于运行时信息才能被评估。

于 2013-02-13T15:53:30.917 回答