2011-08-18 32 views
0

兩者都正常工作。我只是好奇PHP如何解析這兩個。他們在速度,效率等方面有差異嗎?爲什麼php允許我們同時使用?

+1

檢查了這一點http://php.net/manual/en/language.types.array.php – Rikesh

+0

打開錯誤一個簡單的答案報告;) – edorian

回答

2

如果您只使用literal php將此識別爲constant。所以它試圖找到這個常量,如果失敗 - 它只是假設你的願望是使用字符串文字'literal'。但是,爲了表明它沒有發現這個常量,它會引起Notice級錯誤。

所以,只用literal有tweo缺點:

  1. 如果你不斷literal定義 - 你會得到它的價值(這是一個正確的用法),不串'literal'
  2. 你如果你沒有這樣的常數,就會收到Notice

所以,不要只用literal,除非你有一個定義了該名稱的常量。

3

區別在於第一個('literal')是一個字符串鍵,第二個是未定義的常量。 PHP允許你同時使用,因爲開發者試圖修復那些在閱讀文檔時不注意的人的糟糕代碼。速度有所不同,因爲第二個會提出一個警告 - 未定義的常量。基本上,不要使用第二個。

0

$ arrayName [literal]是不好的,因爲如果你有常量命名文字,你會得到意想不到的結果。當它不是常量命名文字,PHP將文字轉換爲字符串'文字'

+0

只是爲了確認像什麼注:第二個會提出一個警告 - 未定義的常量,那麼PHP會將未定義的常量轉換爲「文字」?我知道了嗎? – kaz

+0

@kaz是的,你說得對 – Greenisha

0

http://php.net/manual/en/language.types.array.php

數組做什麼和不做什麼 * 爲什麼$ foo的[bar]錯了? *

始終在字符串文字數組索引周圍使用引號。例如, $ foo ['bar']是正確的,而$ foo [bar]不是。但爲什麼?這是常見 遇到這種語法的舊腳本:

<?php 
$foo[bar] = 'enemy'; 
echo $foo[bar]; 
// etc 
?> 

這是錯的,但它的工作原理。原因是這段代碼有一個 未定義的常量(bar)而不是一個字符串('bar' - 注意引號)。 PHP可能在將來定義常量,不幸的是,對於 這樣的代碼,它們具有相同的名稱。它可以工作,因爲PHP自動將 轉換爲包含裸字符串的字符串的裸字符串(不帶 的任何已知符號的未加引號的字符串)。對於 實例,如果沒有定義的常量bar,那麼PHP將 替換爲字符串'bar'並使用它。