2016-11-11 36 views
1

PHP陣列()[] =失敗:爲什麼[]在文字數組上失敗?

<?php 
// PHP Version => 5.6.13 
$e=array()[]=1;  // REJECTED "E_COMPILE_ERROR : type 64 -- Cannot use [] for reading " 
$d=array();$e=$d[]=1; // Workaround - accepted 

儘管手冊說array() returns an arraysomearray[]= assigns a value to an array

爲什麼?

+3

*「的** **現有的陣列可以通過明示地設定值來改變。」 *在你第一個例子中的數組還不存在。 – Rizier123

+0

它的確如此。 array()創建它,它存在,然後[]嘗試訪問它。 – ChrisJJ

回答

1

array()language construct,不是功能。它實際上並不像return這樣的數組,它會在內部創建一個數組,這是一個臨時表達式。您必須首先將其分配給一個變量才能與數組交互。

PHP7有better error for this

Fatal error: Cannot use temporary expression in write context

+0

「它實際上並不像函數那樣返回數組」。然而,它被定義爲返回一個數組(參見我引用的文檔),並且這應該是足夠的,不管這是否「像函數那樣」。因此我得出結論:有一個錯誤 - 行爲和文檔不符合要求。 – ChrisJJ

+0

@ChrisJJ這不是一個錯誤......說這是PHP引擎的核心貢獻者。您不能使用任何需要類似變量的值的表達式。類似於變量的值是函數調用,其他類似變量值的屬性和數組解引用。 – bwoebi

+0

「這不是一個錯誤,你不能使用任何表達式,如果期望類似於變量的值。」這不符合已發佈的語言規範。語言規範並沒有說這裏需要一個類似於變量的值。 – ChrisJJ