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

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

    ...
}

带有static ...的行生成错误:



但是,如果执行以下操作,它将按预期工作:
function validate()
{
    static $timezones = null;
    if(!isset($timezones))
    {
        $timezones = DateTimeZone::listIdentifiers();
    }
    ...
}

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

最佳答案

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

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

您在此处所做的操作违反了PHP中的静态单词规则,您正在为 $ timezones 变量分配动态值

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

检查详细信息。

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

09-11 20:38