【问题标题】:Is Putting Quotes on PHP Named Indexes Unnecessary?是否不需要在 PHP 命名索引上加上引号?
【发布时间】:2018-03-19 14:55:32
【问题描述】:

如下:

$arr = [
    foo => 'bar',
    bar => 'foo'
];

同:

$arr = [
    'foo' => 'bar',
    'bar' => 'foo'
];

换句话说,是否不需要在命名索引上加上引号?真正需要在字符串索引上加引号的唯一时间是什么时候?

【问题讨论】:

  • 你的第一个版本不会抛出警告吗?
  • 打开 PHP 通知 - 未加引号的版本正在尝试使用名为 foobar 的常量。 PHP 7.2 之前的默认行为是发出通知并回退到常量的名称。这现在已被提高为警告,并且可能会从 PHP 8 起停止工作。简而言之,这从来都不是(而且从来都不是)一个好主意。

标签: php arrays indexed


【解决方案1】:

你的第一个例子应该抛出一个通知。如果你不使用引号,那么 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.

【讨论】:

【解决方案2】:

PHP 将“裸字符串”转换为正确的字符串,但会给您一个警告。这个功能将来很可能会消失。

如果你真的非常想这样做(你不应该这样做),它会像日志一样工作,因为字符串匹配 format for a constant,这是正则表达式

[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*

(不要这样做。只是不要。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-30
    • 1970-01-01
    • 1970-01-01
    • 2014-12-18
    • 1970-01-01
    • 2010-10-27
    • 1970-01-01
    相关资源
    最近更新 更多