2013-03-21 184 views
0

我的PHP代碼中有關於動態數組的奇怪錯誤。PHP - 數組致命錯誤

輸出的錯誤是:

Fatal error: Cannot use string offset as an array ... on line 89 

這是我的代碼的一部分,它是一個foreach循環,這是通過設置在一個數據庫中循環內:

foreach($query->fetchAll() as $row) 
{ 
    if($site!=CURRENT_SITE_TEMPLATE) 
    { 
     $property = 'foreignSettings'; 
     $propertyType = 'foreignSettingsTypes'; 
    } else { 
     $property = 'settings'; 
     $propertyType = 'settingTypes'; 
    } 

    $this->$property[$row['variable_section']][$row['variable_name']] = $row['variable_value']; 
    settype($this->$property[$row['variable_section']][$row['variable_name']],$row['variable_type']); 

    $this->$propertyType[$row['variable_section']][$row['variable_name']] = $row['variable_type']; 
} 

對於起見的示例代碼,$site是'admin',CURRENT_SITE_TEMPLATE是'admin'。 此外,$foreignSettings, $foreignSettingsTypes, $settings, and $settingTypes都被定義爲在類範圍

該錯誤是對線89的陣列,其是:

$this->$property[$row['variable_section']][$row['variable_name']] = $row['variable_value']; 

我原先認爲這是因爲$屬性變量accesing陣列的,但是,這看起來像PHP文檔中的有效法定代碼(http://php.net/manual/en/language.variables.variable.php in example #1

對此錯誤的任何幫助將不勝感激。

感謝

+1

設置或foreignSettings屬性是一個數組嗎? var_dump($ this - > $ property)並檢查裏面有什麼。 – cernunnos 2013-03-21 11:50:57

+0

我不知道它應該如何,但嘗試以下方法之一,看看是否可以:'$ this - > {$ property [$ row ['variable_section']] [$ row ['variable_name']] }'或$ $ this - > {$ property} [$ row ['variable_section']] [$ row ['variable_name']]'(第二個應該沒問題) – Voitcus 2013-03-21 12:00:28

+0

是啊,第二個應該這麼做 – ITroubs 2013-03-21 12:03:27

回答

0

問題如下:$this->$property[0]表示您訪問$ property的第0位,在您的情況下,它將是字符串$ property的第一個字母。因此,你最終得到$ this-> f或$ this-> s。

$this->$property[0][0]您將試圖訪問$ property字符串的第0位的第0位因爲您嘗試訪問char的第0位而導致錯誤,這是因爲char可以不作爲數組引用。

你想要的是$this->{$propperty}[0][0]什麼意思是你試圖訪問名爲$ propperty的變量的第0位的第0位。

+0

謝謝,現在似乎在工作,做出的愚蠢的錯誤! – 2013-03-21 12:12:03

1

在你給出的例子$property是一個字符串。然後,您嘗試將其用作數組。字符串只有數字索引(如果需要用作數組)。