2009-09-04 42 views
1

以下哪一項是正確的?第一個代碼在$ _GET數組中沒有引號,第二個代碼沒有引號,我知道當它是一串文本時,你應該擁有它們,但在這種情況下,它是一個變量,如果密鑰是一個數字,那該怎麼辦?PHP數組鍵需要用引號括起來嗎?

沒有引號

function arg_p($name, $default = null) { 
    return (isset($_GET[$name])) ? $_GET[$name] : $default; 
} 

用引號

function arg_p($name, $default = null) { 
    return (isset($_GET['$name'])) ? $_GET['$name'] : $default; 
} 
+0

括號,你會得到一個通知,是'()'和'沒有 '''。後者是單引號或撇號。 – Gumbo 2009-09-04 20:09:38

+0

當你說括號()是你指的是()還是括號[]? 如果我還沒有完全困惑,或者您已經編輯過帖子,那麼您的兩個案例之間的唯一區別就是'$ name'附近的單引號。 – dnagirl 2009-09-04 20:12:41

+1

Gumbo的回答是對的。另外,我會指出在這種情況下,沒有單引號的版本幾乎肯定是一個錯誤。無論$ name的值如何,它總是表現相同。 – Kip 2009-09-04 20:15:34

回答

10

第一個將使用的$name值作爲重點,而第二個將使用文本字符串'$name'關鍵。

+0

好,好東西[3];不會顯示通知的權利? – JasonDavis 2009-09-04 20:16:26

+3

@jasondavis:我假設你的意思是*未知偏移*/*未知索引*通知。那是因爲你應該在試圖閱讀它之前測試它是否存在。一種方法是'isset',另一種'array_key_exists'。 – Gumbo 2009-09-04 20:22:14

7

使用PHP,$_GET["$name"]$_GET[$name]是相同的,因爲PHP將評估雙引號內的變量。這將返回無論變量$name存儲的密鑰。

但是,$_GET['$name']將搜索$name本身的密鑰,而不管變量$name包含的密鑰。

如果密鑰是數字,則$_GET[6]$_GET['6']$_GET["6"]在語法上都是相同的。

2
  • 如果鍵是可變

    $陣列[$鍵]。

您不必引用它。

  • 但如果一個字符串,你必須(它不是一個字符串,如果你不加引號把它包)

    $陣列[「的myKey」];

,如果你不喜歡這樣

$array[mykey]; 
+1

對於$ array [mykey],您將不會收到錯誤消息。你只會得到一個PHP通知。請查看http://thephpcode.blogspot.com/2009/09/php-speed-up-quote-your-strings.html瞭解更多信息。 – mauris 2009-09-05 14:58:53

+0

是的,你是真的,但仍然不好 – Ayoub 2009-09-05 19:10:55

相關問題