2012-03-09 214 views
2

Possible Duplicate:
Syntax error while defining an array as a property of a classPHP的靜態變量初始化

我試圖做到以下幾點:

final class TestClass { 
    public static $myvar = 10*10; //line 3 
    //rest of code... 
} 

但我得到這個錯誤:syntax error, unexpected '*', expecting ',' or ';' [line 3]

爲什麼不是這可能嗎?當然,如果我將10 * 10更改爲100,則一切正常。 不允許用數學計算初始化一個靜態變量嗎?不可能以任何方式?

+1

另外,可以創建一個靜態的getter函數:http://stackoverflow.com/a/7785213/1335996 – 2013-03-13 15:46:23

+0

從PHP 5.6開始,'static'允許使用標量表達式,因此您的問題中的代碼完全可用PHP> = 5.6。一個標量表達式可能包括整數,浮點數,字符串和常量與數學,位,邏輯,連接,三元和比較運算符相結合。 例如,以下定義現在在您的課程內部是正確的: 'public static $ bar =「該課程名稱是」.__ CLASS __;' 'public static $ baz = 8 >> 1;' 'public static $ bat = 10 + 3 * 2;' – 2017-02-19 20:09:59

回答

9

從PHP文檔

Like any other PHP static variable, static properties may only be initialized using a literal or constant; expressions are not allowed. So while you may initialize a static property to an integer or array (for instance), you may not initialize it to another variable, to a function return value, or to an object.

2

編號類屬性(即使是靜態的)只允許通過值初始化,而不是表達式。

2

不,這不可能在靜態/非靜態初始化做任何事情。你只能設置簡單變量(protected $ _value = 10;)或構建數組(protected static $ _arrr = array(「key」=>「value」))。

在重新初始化類之前,您可以創建z初始化靜態方法和$ _isInitialized靜態字段,但必須以某種方式(在構造函數,相同工廠實現等中)調用Initialize方法。

5

我認爲你必須在你的類中創建一個靜態init方法是這樣

final class TestClass { 
    public static $myvar = null; //line 3 

    public static function init() { 
    self::$myvar = 10*10; 
    } 
    //rest of code... 
} 

,並調用init第一喜歡這個

TestClass::init(); 

這就是靜態路