你好,我讀了一段時間,它是更安全的使用括號內的單引號,而不是不這樣做,這是真的嗎?使用括號內的引號 - PHP/MySQL
echo $row[0];
echo $row[id];
或
echo $row['0'];
echo $row['id'];
你好,我讀了一段時間,它是更安全的使用括號內的單引號,而不是不這樣做,這是真的嗎?使用括號內的引號 - PHP/MySQL
echo $row[0];
echo $row[id];
或
echo $row['0'];
echo $row['id'];
是的,因爲你可能有:
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"]
是等價的,可以使用這些你認爲合適的(索引陣列與關聯數組?)
引述表示一個字符串,而沒有引用的表示整數或一個常數。
如果您正在查找關聯數組中的命名數組鍵,通常需要使用字符串文字。 I.E $row['id']
而不是$row[id]
(它不應該工作)。
如果您正在查找數字數組鍵,則字符串將轉換爲整數。所以$row['0']
應該評估爲$row[0]
。不過,我認爲使用實際整數是更好的做法($row[0]
)。我不確定是否會因爲變量轉換而導致實際性能下降,但最好使用正確的數據類型以提高可讀性和準確性。
你的第一個例子:[0]
或['0']
這不需要引號,因爲關鍵是數字。
你的第二個例子:[id]
或['id']
這絕對應該有行情。不帶引號的變體是PHP中的一個遺留功能,實際上不應再使用它。
如果你不包含引號,你實際上告訴PHP使用名爲id
的define()
,而不是字符串id
。在大多數情況下,這是有效的,因爲PHP有一個特性,如果你指定一個不存在的定義,它就會假設字符串是等價的,而不是拋出錯誤。 (這是PHP最糟糕的設計決策之一,但在這裏跑題了)
的一點是,在大多數情況下,它會做完全相同的兩種方式。不帶引號的版本運行速度會比較慢,因爲它需要搜索定義並在沒有找到字符串時進行字符串轉換,但速度不會太慢;你不會注意到它。
真正的危險是,如果別的地方在你的代碼你創建具有相同名稱的定義 - 例如:
define('id','blahblah');
現在PHP會看到$var[id]
爲$var['blahblah']
,這將打破你的代碼。
知道什麼時候使用定義並不容易 - 特別是如果你包含第三方庫 - 這意味着儘管沒有引號的代碼現在可以工作,但它不知道它何時可能突然中斷,沒有你能夠解決原因。
因此,建議是總是當數組元素名稱是字符串時,使用引號。
非常感謝大家,我清楚:D –
'$ row [id]'因爲它被解釋爲'「id」'而起作用,但它確實會拋出一個'E_WARNING'。 – Halcyon