数组中引号之间的区别是什么


What is the difference between quotes inside array

可能重复:
在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语句都可以在[]大括号内使用-字符串、变量、常量、逻辑运算符、函数调用等。