可能重复:
在PHP中使用array[key]可以吗?
之间有什么显著差异吗
$test['car']
和$test[car]
两者产生相同的结果。
在$test[car]
中,car
应为常数。常量是没有引号或在$
前面的裸词。如果您没有定义一个名为car
的常量,PHP将假定您指的是'car'
。这是非常糟糕的行为,但事实就是这样。如果你在开发过程中激活错误报告,你会看到很多错误指出这一点。
它们不一定会产生相同的结果。试试这个代码:
define('car', 'plain');
echo $test['car'] . "'n";
echo $test[car];
没有引号的版本不使用单词"car"作为索引,而是使用名称为"car"的常量。如果没有定义该常量,则假定该常量的值就是它的名称。因此,在您的案例中使用它时,会得到相同的结果。然而,在我的例子中,结果会有所不同。
前者是正确的;后者是PHP设计者选择(相当糟糕)的副作用。
$test[car]
之所以能工作,而不仅仅是因为语法错误而崩溃,是因为PHP将裸词(未以$
为前缀的未识别符号)视为常量,并将未定义的常量视为等效于具有常量名称的字符串。因此,如果未通过define()
定义常数car
,则car
等效于'car'
。
请,为了爱所有美好和快乐,不要依赖这个功能。这是一场潜在的维护噩梦。(事实上,如果你在PHP上显示Notice级别的消息,你会看到一条关于使用未定义常量的消息。)
使用$test['car']
。
数组没有区别
字符串恰好是数组键,这是有区别的。
因此,只使用'car'
和car
而不使用阵列将具有完全相同的效果。
'car'
是一个字符串,而car
是一个非常糟糕的PHP特性:它实际上是一个constant
,没有找到它的名字,它被视为字符串。
虽然输出不相同,但$test[car]
将产生一条错误消息。永远不应该使用。
至于数组-几乎任何PHP语句都可以在[]
大括号内使用-字符串、变量、常量、逻辑运算符、函数调用等。