2017-09-15 90 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

我正在改變我的答案。 –