2012-11-28 58 views

回答

2

是的,因爲你可能有:

define("id", "something else"); 

$row = array(
    "id" => 5, 
    "something else" => "foobar" 
); 

echo $row["id"]; // 5 
echo $row[id]; // foobar 

另外在E_STRICT模式$row[id]會給你一個警告。這就是爲什麼你總是應該開發E_STRICT。通過將error_reporting(E_ALL | E_STRICT);置於腳本的頂部將其打開。

$row[0]$row["0"]是等價的,可以使用這些你認爲合適的(索引陣列與關聯數組?)

0

引述表示一個字符串,而沒有引用的表示整數或一個常數。

如果您正在查找關聯數組中的命名數組鍵,通常需要使用字符串文字。 I.E $row['id']而不是$row[id](它不應該工作)。

如果您正在查找數字數組鍵,則字符串將轉換爲整數。所以$row['0']應該評估爲$row[0]。不過,我認爲使用實際整數是更好的做法($row[0])。我不確定是否會因爲變量轉換而導致實際性能下降,但最好使用正確的數據類型以提高可讀性和準確性。

+0

'$ row [id]'因爲它被解釋爲'「id」'而起作用,但它確實會拋出一個'E_WARNING'。 – Halcyon

1
  • 你的第一個例子:[0]['0']

    這不需要引號,因爲關鍵是數字。

  • 你的第二個例子:[id]['id']

    這絕對應該有行情。不帶引號的變體是PHP中的一個遺留功能,實際上不應再使用它。

    如果你不包含引號,你實際上告訴PHP使用名爲iddefine(),而不是字符串id。在大多數情況下,這是有效的,因爲PHP有​​一個特性,如果你指定一個不存在的定義,它就會假設字符串是等價的,而不是拋出錯誤。 (這是PHP最糟糕的設計決策之一,但在這裏跑題了)

    的一點是,在大多數情況下,它會做完全相同的兩種方式。不帶引號的版本運行速度會比較慢,因爲它需要搜索定義並在沒有找到字符串時進行字符串轉換,但速度不會太慢;你不會注意到它。

    真正的危險是,如果別的地方在你的代碼你創建具有相同名稱的定義 - 例如:

    define('id','blahblah'); 
    

    現在PHP會看到$var[id]$var['blahblah'],這將打破你的代碼。

    知道什麼時候使用定義並不容易 - 特別是如果你包含第三方庫 - 這意味着儘管沒有引號的代碼現在可以工作,但它不知道它何時可能突然中斷,沒有你能夠解決原因。

    因此,建議是總是當數組元素名稱是字符串時,使用引號。

+0

非常感謝大家,我清楚:D –