是否可以使用没有单引号或双引号的数组,如$ array [key]?我认为这很糟糕,因为如果我不使用单引号或双引号,PHP会先寻找常量。我的一位同事告诉我这没关系。
你们有什么想法?
答案 0 :(得分:42)
不被视为正常 - 即使它在大多数情况下都有效。
基本上,当PHP看到这个时:
echo $array[key];
它将搜索一个由define
定义的常量,名为 key
- 如果没有,则会取'key'
值
但是,如果您的代码中有类似的内容:
define('key', 'glop');
不会采取
echo $array['key'];
了相反,它将使用 key
常量的值 - 并且您的代码将与以下内容相同:
echo $array['glop'];
最后,由于至少有两个原因,不在关键名称旁边加引号是坏的:
define
一个错误的名称的常量; - )'key'
error_reporting
和display_errors
,仍会生成通知/警告/错误,即使稍后会被丢弃)< / em>的所以:在这一点上你不应该听那个人:他错了:这很重要。
如果您需要一些比人们在stackoverflow上告诉您的“更好”的“证据”,您可以将他指向本手册的这一部分,作为参考: Why is $foo[bar] wrong?
答案 1 :(得分:6)
这不没关系,加上其他人所说的,在大多数情况下都会触发错误:
8 Notice Use of undefined constant key - assumed 'key' in file: 'index.php' on line 46
请参阅PHP Manual中的“为什么$ foo [bar]错误?”在此页面上的“数组做和不做”下:http://php.net/manual/en/language.types.array.php
答案 2 :(得分:4)
这是错误的并且会自动定义一个常量:
$var = $array[bar];
但这种用法是正确的:
$var = "string $array[bar] ...";
为了与PHP2兼容,在字符串上下文中仍然允许使用这种旧语法。引用该键会导致解析错误,除非您还在其周围使用{花括号}。
答案 3 :(得分:3)
来自PHP Manual - Why is $foo[bar] wrong?
始终在字符串文字数组索引周围使用引号。例如,$ foo ['bar']是正确的,而$ foo [bar]则不是。但为什么?在旧脚本中遇到这种语法是很常见的:
<?php
$foo[bar] = 'enemy';
echo $foo[bar];
// etc
?>
这是错误的,但它确实有效。原因是这段代码有一个未定义的常量(bar)而不是一个字符串('bar' - 注意引号)。 PHP可能在将来定义常量,不幸的是,这些代码具有相同的名称。它的工作原理是因为PHP自动将一个裸字符串(一个与任何已知符号不对应的不带引号的字符串)转换为包含裸字符串的字符串。例如,如果没有定义的名为bar的常量,那么PHP将替换字符串'bar'并使用它。
本手册中还有一些示例供您查看。
答案 4 :(得分:2)
由于多种原因,不引用键值是bad practice:
define
'd常量。"]"
)。define
需要时间。如果你想避免在名字中输入引号,这些名称只是你经常传递的东西的标准元素,也许你可能想要使用对象,它采用object->property
语法代替$array["element"]
语法。
答案 5 :(得分:2)
除非密钥实际上是常量,否则你没有理由不在密钥周围加上引号。
PHP的工作方式是查找你所放置的常量值,但是如果找不到常量则需要它的字符串表示。
如果有人要在路上编辑你的代码并添加一个带有该密钥名称的常量,那么这只会引起更多麻烦。