2010-09-29 90 views
27

在我的劇本之一,我嘗試做以下無法使用[]讀取

$data[] = self::get($row['sr_id']); // <-- line 55 

然而,PHP不允許我這樣做,給我這個錯誤

Fatal error: Cannot use [] for reading in /file.php on line 55

self::get函數返回一個布爾或對象。

編輯: get函數創建一個新的對象,它再次從mysql數據庫加載數據。

+2

檢查$行包含 – Eiko 2010-09-29 09:23:53

+1

'print_r($ row)' – 2010-09-29 09:25:18

+0

你可以顯示周邊代碼/ get方法嗎? – halfdan 2010-09-29 09:30:37

回答

15

老版本的PHP在表達式中接受$var[],允許不管語法的讀出$var內容。 PHP 5.1使得這是非法的。但有時候,錯誤是在默認情況之外觸發的。
所以我的猜測(再次顯示更多代碼)是前面的行包含未完成的表達式,$data[]加入。

在對象屬性的情況下,你可以包裝你的$ data var到{ },但這似乎不是你的情況的問題。 (否則54行中有東西,你沒有顯示。)右側不能合理觸發錯誤。即使是數組訪問[]整數或對象也不會觸發該致命錯誤。

所以如果沒有什麼幫助,只需使用array_push()。解決PHP。

+0

謝謝,'array_push()'函數實現了這個訣竅,現在它可以工作。 :) – eriktm 2010-09-29 18:15:08

+0

可能是這樣,或者數組可能是未定義的或不同類型的,這可能會導致這個致命錯誤。 (見下文)。 – lucian303 2013-06-10 23:51:53

0

嘗試:

$data = Array(); 
$data[] = self::get($row['sr_id']); // <-- line 55 
+0

不初始化數組不會導致致命錯誤。 – 2010-09-29 09:48:17

+0

它沒問題,但如果$ data之前是一個對象或變量,它可能會 – sathia 2010-09-29 09:52:04

+0

這不會改變錯誤 – eriktm 2010-09-29 10:19:47

28

在我的案件的解決方案,這是:

  • 壞線:

$this->$ExtraTag[] = $fullscript;

  • 好線:

$this->{$ExtraTag}[] = $fullscript;

$this->ExtraTag[] = $fullscript;

+0

甜。 $ this - > {$ ExtraTag} [] = $ fullscript爲我工作! – FateNuller 2015-06-22 16:01:21

+1

我並不感到驚訝,第一個「壞」行不起作用,最後一行是:「壞」行實際上是無效的語法,最後一行是預期的語法。中間的例子是一個醜陋的解決方法,把第一個例子變成第三個例子。我建議不要這麼做:它不那麼清晰,簡潔,性能較差(因爲PHP沒有預編譯器來優化它到第三個例子)。 – Byson 2017-07-21 13:06:18

0

我得到的錯誤是:

Fatal error: Cannot use [] for reading in /pathtosite/drupal/sites/all/themes/zenui/templates/page.tpl.php on line 33

有時問題是,當你有這樣一行:

$page['sidebar_first'][] 

這可能發生,如果你正在複製一個變量名並忘記註釋掉該行。

有兩個問題:

1。缺少分號

2. $變量[]必須設置一個變量

修復這兩個問題我的代碼後讀:

$page['sidebar_first'][] = $value; 

不要忘了註釋掉行,你不用來幫助調試進程

希望這可以幫助像我這樣的程序員!

0

我與我的劇本同樣的問題,下面的行拋出了同樣的錯誤:

$array[]=$value 

我只需

$array[count($array)-1]=$value 

取代它,它完美地工作。

0

另一個可能的問題可能是意外雙重==。 例如,不小心在做$myArray[] == $myNewValue;會導致這個錯誤(因爲你正試圖用==讀取一個值,而不是告訴PHP分配一個新的數組索引)。