在PHP中使用array 可以吗?

可以使用没有单引号或双引号的数组像$ array [key]? 我认为这是不好的,因为如果我不使用单引号或双引号,PHP首先查找常量。 我的一位同事告诉我说没关系。

你们有什么感想?

它不被认为是好的 – 即使它在大多数情况下也能工作。

基本上,当PHP看到这个:

echo $array[key]; 

它将search一个常量,用define ,称为key – 如果没有,则会采用'key'值。

但是,如果在你的代码之前有这样的事情:

 define('key', 'glop'); 

它不会拿

 echo $array['key']; 

已经; 相反,它将使用key常量的值 – 您的代码将与以下内容相同:

 echo $array['glop']; 

最后,不要把报价周围的钥匙的名字是不好的至less有两个原因:

  • 有一个风险, 它不会做你期望的 – 这是非常糟糕的
    • 可能今天…
    • 但下周/月/年呢?
    • 也许有一天,你会define一个错误的名字来define一个常量;-)
  • 性能不佳:
    • 它必须search一个常量,然后使用'key'
    • 而且,如评论所述,它会生成通知(即使您禁用了error_reportingdisplay_errors ,即使稍后被丢弃,仍会生成通知/警告/错误)

所以:在这一点上,你不应该听那个人:他是错的, 这很重要

如果你需要一些“certificate”比人们在“计算器”上可以告诉你的“更好”,你可以把它指向手册的这一部分,作为参考: 为什么$ foo [bar]是错误的?

这是不好的,增加别人的话,在大多数情况下会引发错误:

 8 Notice Use of undefined constant key - assumed 'key' in file: 'index.php' on line 46 

请参阅PHP手册中的“为什么$ foo [bar]错误?”一节。 在这个页面上的“Array do not and don'ts”下: http : //php.net/manual/en/language.types.array.php

从PHP手册 – 为什么$ foo [bar]错误?

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

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

这是错误的,但它的工作原理。 原因是这段代码有一个未定义的常量(bar)而不是一个string(“bar” – 注意引号)。 PHP可能在将来定义常数,不幸的是,这样的代码具有相同的名称。 它的工作原理是,PHP自动将一个裸露的string(与任何已知符号不相对应的未加引号的string)转换为一个包含裸露string的string。 例如,如果没有定义常量bar,那么PHP会replacestring“bar”并使用它。

手册中还有更多的例子供您参考。

这是错误的,会自动定义一个常量:

 $var = $array[bar]; 

但是这个用法是正确的:

 $var = "string $array[bar] ..."; 

为了与PHP2兼容,旧的语法在string上下文中仍然是允许的。 引用键会导致parsing错误,除非你也使用{花括号}。

除非密钥实际上是一个常数,否则没有理由不在密钥的附近加引号。

PHP工作的方式是查找所放置的常量值,但是如果找不到常量,则会使用string表示forms。

如果有人在路上编辑你的代码,并添加一个关键名称的常量,这只会导致更多的麻烦。

不要引用关键值是不好的做法 ,原因如下:

  1. 与有意义的符号名称的潜在冲突,例如define'd常量。
  2. 有些键不能不用引号来表示(例如键"]" )。
  3. 不良的习惯可能会在以后咬你(即关于#1和#2)。
  4. 性能 – searchdefine需要时间。

如果你想要避免在名字中input引号,而这些名字只是你传入的东西的标准元素,那么也许你可能想要使用对象,而不是一个$array["element"]object->property语法$array["element"]语法。