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