2012-12-13 231 views
0

讓我用我的代碼解釋我的問題。這工作:php數組對象屬性

$multiarray = array(
    'multikey1' => '', 
    'multikey2' => '' 
); 
$array = array(
    'key1' => '', 
    'key2' => '', 
    'key3' => '', 
    'key4' => $multiarray 
); 
print_r($array); 

這不起作用:

class Array { 

    public static $multiarray = array(
     'multikey1' => '', 
     'multikey2' => '', 
     'multikey3' => '' 
    ); 

    public $array = array(
     'key1' => '', 
     'key2' => self::$multiarray 
    ); 
} 

$array = new Array; 

這並不遺憾的是工作。任何想法如何解決這個問題?

+7

不能創建一個類的名稱數組。它是保留的。 – bobthyasian

+0

@bobthyasian,謝謝,但在我的真實代碼中,我沒有命名這個類Array,它只是作爲一個例子 – Orhan

+0

爲了將來的參考,儘管一個簡短的例子總是值得讚賞的,試着選擇一個不包含無關的錯誤... – Basic

回答

1

您不能將成員變量初始化爲任何不是常量的東西,並且您試圖包含另一個數組作爲成員變量,這需要運行時執行。

另請注意,Array類名無效,因爲它與用於創建數組的保留字array相沖突。

the manual

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

的解決方法是設置你的變量在構造函數:

class Array2 { 
    public static $multiarray = array(
     'multikey1' => '', 
     'multikey2' => '', 
     'multikey3' => '' 
    ); 

    public $array; 

    function __construct() { 
     $this->array = array(
      'key1' => '', 
      'key2' => self::$multiarray 
     ); 
    } 
} 
+0

感謝您的回答!我試圖理解你的答案,但我不明白。你能否說明你的觀點? – Orhan

+0

@Orhan類被認爲是藍圖,它們的屬性定義需要獨立於任何運行時環境或變量。使用構造函數初始化要包含變量的屬性(如答案中的nickb所示)。 – MrCode