数组内的引号有什么区别

时间:2012-03-12 08:17:44

标签: php

  

可能重复:
  Is it okay to use array[key] in PHP?

之间是否有任何显着差异

$test['car']$test[car]

两者都产生相同的结果。

4 个答案:

答案 0 :(得分:5)

$test[car]中,car预计为常量。常量是没有引号或前面$的单词。如果您没有定义名为car的常量,PHP将假设您的意思是'car'。这是非常糟糕的行为,但事实就是如此。如果您在开发过程中激活了错误报告,那么您会看到很多错误指出这一点。

答案 1 :(得分:2)

它们不一定产生相同的结果。试试这段代码:

define('car', 'plain');
echo $test['car'] . "\n";
echo $test[car];

没有引号的版本不使用单词“car”作为索引 - 而是使用名为“car”的常量。如果未定义该常量,则假定常量的值为其名称。因此,在您的情况下使用它时会得到相同的结果。但是在我的例子中,结果会有所不同。

答案 2 :(得分:1)

前者是正确的;后者是PHP设计者选择(相当糟糕)的副作用。

$test[car]完全起作用并且不会因语法错误而崩溃的原因是因为PHP将裸字(无法识别的符号,前缀为$)视为常量,并且{ {3}}。因此,如果您未通过car定义常量'car',则car相当于define()

请为了所有美好和快乐的爱,不要依赖这个功能。这是一场等待发生的潜在维护噩梦。 (事实上​​,如果您在PHP上显示了通知级别的消息,您将看到有关使用未定义常量的消息。)

使用$test['car']

答案 3 :(得分:-1)

数组

没有区别

字符串恰好是数组键的区别。

因此,仅使用'car'car而不使用数组会产生完全相同的效果。

'car'是一个字符串car是一个非常糟糕的PHP功能:它实际上是一个constant,它找不到该名称,被视为一个字符串。

虽然输出不一样,$test[car]会产生错误信息。永远不应该使用过。

对于数组 - 几乎所有PHP语句都可以在[]括号内使用 - 字符串,变量,常量,逻辑运算符,函数调用等。