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

&引用;PHP致命错误:常量表达式包含无效操作“;,初始化静态内联时?,php,compiler-errors,php-7,Php,Compiler Errors,Php 7,我想知道为什么我的静态变量初始化不能使用以下声明: function validate() { static $timezones = DateTimeZone::listIdentifiers(); // Error here ... } 带有静态…的行生成错误: PHP致命错误:常量表达式包含无效操作 但是,如果我执行以下操作,它将按预期工作: function validate() { static $timezones = null; if(!isse

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

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

    ...
}
带有
静态…
的行生成错误:

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

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

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

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

基于php文档;不能使用其他非常量表达式或变量初始化静态变量

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

您在这里所做的是违反PHP中的静态单词规则,您正在为$timezones变量指定一个动态值

static $timezones = DateTimeZone::listIdentifiers(); // Error here
查看详细信息


基于php文档;不能使用其他非常量表达式或变量初始化静态变量

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

您在这里所做的是违反PHP中的静态单词规则,您正在为$timezones变量指定一个动态值

static $timezones = DateTimeZone::listIdentifiers(); // Error here
查看详细信息


请停止标签垃圾邮件。你的帖子不可能同时是C++和PHP,绝对不是你发布的C++代码。你不是新来的;你知道标签是如何工作的。停止随机添加它们。错误消息中解释了它失败的原因。@KenWhite Ah。。。对不起,这是一个建议的标签,因为我也做了大量的C++…谢谢你的编辑。请停止标签垃圾邮件。你的帖子不可能同时是C++和PHP,绝对不是你发布的C++代码。你不是新来的;你知道标签是如何工作的。停止随机添加它们。错误消息中解释了它失败的原因。@KenWhite Ah。。。对不起,这是一个建议的标签,因为我也做了大量的C++…谢谢你的编辑。啊,你给了我们错误的链接,正确的链接是:因为我的示例在函数中显示了一个静态变量,而不是在对象中。不需要常数。你可以有一个表达式,但没有函数调用。我正在更改我的答案。啊,你给我们的链接是错误的,正确的链接是:因为我的示例显示的是函数中的静态变量,而不是对象中的静态变量。不需要常数。您可以有一个表达式,但不能调用函数。我正在更改答案。