在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_reporting
和display_errors
,即使稍后被丢弃,仍会生成通知/警告/错误)
- 它必须search一个常量,然后使用
所以:在这一点上,你不应该听那个人:他是错的, 这很重要 。
如果你需要一些“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。
如果有人在路上编辑你的代码,并添加一个关键名称的常量,这只会导致更多的麻烦。
不要引用关键值是不好的做法 ,原因如下:
- 与有意义的符号名称的潜在冲突,例如define'd常量。
- 有些键不能不用引号来表示(例如键
"]"
)。 - 不良的习惯可能会在以后咬你(即关于#1和#2)。
- 性能 – search
define
需要时间。
如果你想要避免在名字中input引号,而这些名字只是你传入的东西的标准元素,那么也许你可能想要使用对象,而不是一个$array["element"]
的object->property
语法$array["element"]
语法。