Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP命名索引上加引号是否不必要?_Php_Arrays_Indexed - Fatal编程技术网

在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中的一个警告。很好,希望他们真的移除了它。