哪个更好用:$ arrayName ['literal']或$ arrayName [literal]?

时间:2011-08-18 09:21:47

标签: php

两者都运转良好。我只是好奇php如何解析这两个。他们在速度,效率等方面有区别吗?为什么php允许我们同时使用它们?

4 个答案:

答案 0 :(得分:3)

区别在于第一个('literal')是一个字符串键,第二个是未定义的常量。 PHP允许你使用这两者,因为开发人员试图修复那些在阅读文档时没有注意的人的坏代码。速度有差异,因为第二个会引发警告 - 未定义的常数。基本上,不要使用第二个。

答案 1 :(得分:2)

如果您只使用literal php,则将其识别为constant。所以它试图找到那个常数,如果它失败了 - 它只是假设你的愿望是使用字符串文字'literal'。但是,为了表明它没有找到常量,它会引发Notice级错误。

因此,仅使用literal有两个缺点:

  1. 如果您定义了常量literal - 您将获得它的值(这是正确的用法),而不是字符串'literal'
  2. 如果您没有这样的常数,您将收到Notice
  3. 所以,除非你有一个定义了该名称的常量,否则不要只使用literal

答案 2 :(得分:0)

$ arrayName [literal]很糟糕,因为如果你有常量命名文字,你会得到意想不到的结果。当它没有常量命名文字时,php将文字转换为字符串'literal'

答案 3 :(得分:0)

http://php.net/manual/en/language.types.array.php

  

阵列做与不做   * 为什么$ foo [bar]错了? *

     

始终在字符串文字数组索引周围使用引号。例如,   $ foo ['bar']是正确的,而$ foo [bar]则不是。但为什么?是很常见   在旧脚本中遇到这种语法:

<?php
$foo[bar] = 'enemy';
echo $foo[bar];
// etc
?> 
     

这是错误的,但它确实有效。原因是这段代码有一个   undefined constant(bar)而不是字符串('bar' - 注意引号)。 PHP可能在将来定义常量,不幸的是   这样的代码,具有相同的名称。它的工作原理是因为PHP自动   转换一个裸字符串(一个不相符的不带引号的字符串   将任何已知符号转换为包含裸字符串的字符串。对于   例如,如果没有名为bar的已定义常量,那么PHP将会   替换字符串'bar'并使用它。