可以在PHP中使用array [key]吗?

Moo*_*oon 23 php array-key

是否可以使用没有单引号或双引号的数组,如$ array [key]?我认为这很糟糕,因为如果我不使用单引号或双引号,PHP会先寻找常量.我的一位同事告诉我,这没关系.

你们有什么感想?

Pas*_*TIN 42

它被认为没有问题 - 即使它在大多数情况下都能正常工作.


基本上,当PHP看到这个:

echo $array[key];
Run Code Online (Sandbox Code Playgroud)

它将搜索一个常量,定义为define,被调用key- 如果没有,则将获取该'key'值.


但是,如果您的代码中有类似的内容:

define('key', 'glop');
Run Code Online (Sandbox Code Playgroud)

它不会

echo $array['key'];
Run Code Online (Sandbox Code Playgroud)

再也没有 相反,它将使用常量的值key - 您的代码将与以下内容相同:

echo $array['glop'];
Run Code Online (Sandbox Code Playgroud)


最后,由于至少有两个原因,不在密钥的名称旁边加上引号是不好的:

  • 有一种风险,即它不会做你所期望的 -这是非常糟糕
    • 今天可能......
    • 但下周/月/年呢?
    • 也许,有一天,你会define因为错误的名字而不断变化;-)
  • 这对性能不利:
    • 它必须在使用之前搜索常量 'key'
    • 而且,作为一个评论说,它会生成通知(即使禁用error_reportingdisplay_errors,仍然产生了告示/警告/错误,即使后来废弃)

所以:在这一点上你不应该听那个人:他错了:它确实很重要.


如果你需要一些比人们在stackoverflow上告诉你的"更好"的"证据",你可以将他指向手册的这一部分,作为参考:为什么$ foo [bar]错了?

  • 此外,每次PHP看到这种语法时,它都会抛出一个E_NOTICE,它有一些性能开销.并且可能会将一些垃圾邮件写入您的日志.因为您应该记录并解决通知级错误. (3认同)
  • +1不使用数组键的引号是愚蠢的,并且有一天会引起麻烦. (3认同)

Dar*_*ein 6

这是不是很好,而且添加到别人怎么说,这将引发在大多数情况下的错误:

8 Notice Use of undefined constant key - assumed 'key' in file: 'index.php' on line 46
Run Code Online (Sandbox Code Playgroud)

请参阅PHP手册中的"为什么$ foo [bar]错误?" 在此页面上的"数组做和不做"下:http://php.net/manual/en/language.types.array.php