2012-08-12 65 views
1

聲明多維靜態PHP類陣列我刷新我的PHP知識,有一個問題,我不能在我自己解決:錯誤使用靜態類數組

我有兩個私人靜態數組類,我想要存儲爲另一個(多維)靜態類數組的值,但我總是得到*意外的T_VARIABLE *錯誤。這裏是我的失敗simplyfied示例代碼(只是一個而不是兩個靜態數組填寫以下多維數組中):

class MyClass { 
    private static $firstArr = array('a' => 'A', 'b' => 'B'); 

    private static $multiArr = array('a' => self::$firstArr); 
} 

我真不明白什麼是錯在這裏。我可以很容易地將self :: $ firstArr替換爲$ firstArr本身的陣列聲明,但我很想理解我在這裏做錯了什麼,無論如何。

因此,歡迎任何評論!

乾杯, 羅馬。

回答

3

聲明類屬性時不能做任何類型的額外評估。

private static $multiArr = array('a' => self::$firstArr); 
//    Can't do this -----^ 

Link in docs

這個聲明可能包括初始化,但初始化必須是一個恆定值 - 也就是說,它必須能夠在編譯時進行評估,不能依賴於運行時間信息以便評估。

你是對的避免複製/粘貼 - 這種'運行時信息'通常在構造函數中完成。

+0

我明白了,聽起來很公平。謝謝你的解釋,我還不知道(這可能意味着我正在做的事情應該以不同的方式完成......)。 – RSeidelsohn 2012-08-12 13:52:53

+1

是的,這有點煩人,當你需要從靜態屬性評估表達式時,你需要將它們放在一個靜態init方法中,例如你可以從類文件本身調用它,或者找到另一個設計。@Mike B你如何管理那實際上? – darma 2012-08-12 13:55:17