2017-09-15 86 views
0

我想知道那为什么我的静态变量初始化不声明如下工作:当初始化静态内联时,“PHP致命错误:常量表达式包含无效操作”?

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

    ... 
} 

static ...行生成错误:如果我做了以下

PHP Fatal error: Constant expression contains invalid operations

,虽然,它按预期工作:

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

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

+0

请停止标记垃圾信息。你的帖子不可能同时是C++和PHP,这绝对不是你发布的C++代码。你不是新来的;你知道标签是如何工作的。停止随机添加它们。 –

+0

为什么它在错误信息中解释失败。 – zerkms

+0

@KenWhite啊...对不起,这是一个建议的标签,因为我也做了很多C++ ...感谢编辑。 –

回答

2

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

,如果你想分配一个值的静态变量此值应该是一个整数,字符串,这意味着等

做过什么,这里是防静电字规则PHP,您到分配一个动态值$时区变量

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

检查的详细信息。

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

+0

是的,你是对的我应该更清楚 –

+0

啊,你给了我们错误的链接,正确的链接是这一个:http://php.net/manual/en/language.variables.scope.php#language。 variables.scope.static,因为我的示例在函数中显示静态变量,而不是在对象中。常数不是必需的。你可以有一个表达式,但没有函数调用。 –

+0

我正在改变我的答案。 –