在PHP命名索引上加引号是否不必要?
详情如下:在PHP命名索引上加引号是否不必要?,php,arrays,indexed,Php,Arrays,Indexed,详情如下: $arr = [ foo => 'bar', bar => 'foo' ]; 同: $arr = [ 'foo' => 'bar', 'bar' => 'foo' ]; 换句话说,在命名索引上加引号是不必要的吗?什么时候才真正需要在字符串索引上加引号?您的第一个示例应该引起注意。如果不使用引号,PHP将查找具有该名称的常量 php > $myArr = [abc => 'hello']; PHP Notice:
$arr = [
foo => 'bar',
bar => 'foo'
];
同:
$arr = [
'foo' => 'bar',
'bar' => 'foo'
];
换句话说,在命名索引上加引号是不必要的吗?什么时候才真正需要在字符串索引上加引号?您的第一个示例应该引起注意。如果不使用引号,PHP将查找具有该名称的常量
php > $myArr = [abc => 'hello'];
PHP Notice: Use of undefined constant abc - assumed 'abc' in php shell code on line 1
PHP Stack trace:
PHP 1. {main}() php shell code:0
Notice: Use of undefined constant abc - assumed 'abc' in php shell code on line 1
Call Stack:
9.7779 350840 1. {main}() php shell code:0
我在PHP7.1.8中运行了这个示例,但是在PHP7.2中运行了这个示例。PHP将“裸字符串”转换为正确的字符串,但会给您一个警告。这种功能很可能在将来消失 如果您真的真的想这样做(您不应该这样做),它将作为日志来工作,因为字符串与正则表达式匹配
[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*
(不要这样做。不要这样做。)您的第一个版本不会抛出警告吗?请参阅打开PHP通知-未引用的版本正在尝试使用名为
foo
和bar
的常量。PHP7.2之前的默认行为是发出通知并返回到常量的名称。这已经增加到一个警告,并且可能从PHP8起停止工作。简而言之,这从来都不是一个好主意。这只是PHP7.1及更早版本中的一个通知(不是错误)和PHP7.2中的一个警告。很好,希望他们真的移除了它。