echo "<input type=\"text\" size=3 name=\"{$item[\"name\"]}\"/>";
但以下工作正常PHP爲什麼扔語法錯誤代碼
echo "<input type=\"text\" size=3 name=\"{$item['name']}\"/>";
按我的理解\「真的難逃」
echo "<input type=\"text\" size=3 name=\"{$item[\"name\"]}\"/>";
但以下工作正常PHP爲什麼扔語法錯誤代碼
echo "<input type=\"text\" size=3 name=\"{$item['name']}\"/>";
按我的理解\「真的難逃」
您不需要轉義{}
內的引號。這應該被引用,因爲它意味着PHP數組$name
的字符串索引"name"
。如果沒有引號(或逃脫引號),name
被視爲一個常量(我假設它不是),然後你有一對不屬於的引號。
OTOH,這也將是正確的:
echo "<input type=\"text\" size=\"3\" name=\"$item[name]\"/>";
(周圍沒有name
報價,而不要{}
要麼)
看到http://www.php.net/manual/en/language.types.string.php#language.types.string.parsing
回覆:發表評論
任何不含引號的非關鍵字或$符號被視爲一個常量(因爲您可以使用define函數來定義),因此"name"
(帶引號)是一個字符串,並且不帶引號的name
是常數。
,但是:
echo "{$item[name]}";
PHP會先尋找一個不變的名稱name
,那麼如果它不存在,它將使用字符串"name"
。但是,它會(取決於您的設置?)也發出警告。
它是你剛剛那些邊緣案件之一因翻譯而受到處理。沒什麼特別的。
在$item[\"name\"]
,反斜槓\
是非法的,不應該在那裏,所以你得到你的語法錯誤。
想想逃逸
echo "<input type=\"text\" size=3 name=\"{$item[\"name\"]}\"/>";
後,想什麼什麼將成爲
<input type="text" size=3 name="{$item["name"]}"/>";
,你可以看到是錯誤的名稱屬性後,報價將在第二次試舉結束離開休息掛
據我瞭解$ item [「name」]被php解釋器替換爲一個值讓我們說它是xyz,所以最終的輸出將「 ; – David
$item["name"]
是變量的完整名稱,因此當您使用某些打印時不能建立變量名稱功能。
在這種情況下,最好連接字符串,而不是以隱式方式插入變量。例如
echo "<input type=\"text\" size=3 name=\"" . $item["name"] . "\"/>";
或類似
printf("<input type=\"text\" size=3 name=\"%s\"/>", $item["name"]);
//Parameters info at http://www.php.net/manual/es/function.sprintf.php
請您詳細說明一下。我有點困惑這裏$ item是一個數組,並且需要通過字符串「name」進行索引,而不是名稱是const。 – David
@大衛:參見更新 – mpen
謝謝馬克。你說得很清楚。因此爲了代碼的健壯性,我甚至不應該使用echo「{$ item [name]}」;因爲如果名稱常量存在(代碼中的其他地方),評估結果將與它不存在時(名稱常量)的結果不同。 – David