“PHP致命错误:常量表达式包含无效操作”,初始化静态内联时?

时间:2017-09-15 02:34:57

标签: php compiler-errors php-7

我想知道为什么我的静态变量初始化不适用于以下声明:

function validate()
{
    static $timezones = DateTimeZone::listIdentifiers(); // Error here

    ...
}

static ...行会生成错误:

  

PHP致命错误:常量表达式包含无效操作

但是,如果我执行以下操作,它会按预期工作:

function validate()
{
    static $timezones = null;
    if(!isset($timezones))
    {
        $timezones = DateTimeZone::listIdentifiers();
    }
    ...
}

所以我解决了这个问题,但我想知道为什么第一种方法失败了?

1 个答案:

答案 0 :(得分:2)

基于php文档;您不能使用另一个非常量表达式或变量初始化静态变量。

这意味着如果要为静态变量赋值,则该值应为整数,字符串等。

你在这里做的是反对PHP中的静态字规则你为 $ timezones 变量赋予动态值

static $timezones = DateTimeZone::listIdentifiers(); // Error here

检查详细信息。

http://php.net/manual/en/language.variables.scope.php#language.variables.scope.static

相关问题