在 PHP 命名索引上加引号是不必要的吗?
Is Putting Quotes on PHP Named Indexes Unnecessary?
如下:
$arr = [
foo => 'bar',
bar => 'foo'
];
等同于:
$arr = [
'foo' => 'bar',
'bar' => 'foo'
];
换句话说,在命名索引上加引号是不必要的吗?什么时候才真正需要在字符串索引上加上引号?
您的第一个示例应该抛出 NOTICE。如果您不使用引号,那么 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
我 运行 这个例子在 PHP 7.1.8,但是在 PHP 7.2 this has been deprecated.
PHP 将 "bare strings" 转换为正确的字符串,但会给您一个警告。此功能将来可能会消失。
如果您真的非常想这样做(您不应该),它将作为日志工作,因为字符串匹配 format for a constant,即正则表达式
[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*
(不要这样做。就是不要。)
如下:
$arr = [
foo => 'bar',
bar => 'foo'
];
等同于:
$arr = [
'foo' => 'bar',
'bar' => 'foo'
];
换句话说,在命名索引上加引号是不必要的吗?什么时候才真正需要在字符串索引上加上引号?
您的第一个示例应该抛出 NOTICE。如果您不使用引号,那么 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
我 运行 这个例子在 PHP 7.1.8,但是在 PHP 7.2 this has been deprecated.
PHP 将 "bare strings" 转换为正确的字符串,但会给您一个警告。此功能将来可能会消失。
如果您真的非常想这样做(您不应该),它将作为日志工作,因为字符串匹配 format for a constant,即正则表达式
[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*
(不要这样做。就是不要。)