【问题标题】:How does PHP deal with undefined constant?PHP如何处理未定义的常量?
【发布时间】:2018-06-07 17:15:28
【问题描述】:

我正在使用 PHP 7.0.2

考虑以下 PHP 手册中的文本:

为什么 $foo[bar] 错了?

始终在字符串文字数组索引周围使用引号。例如, $foo['bar'] 是正确的,而 $foo[bar] 不是。但为什么?这很正常 在旧脚本中遇到这种语法:

<?php
$foo[bar] = 'enemy';
echo $foo[bar];
// etc
?>

这是错误的,但它有效。原因是这段代码有一个 未定义的常量 (bar) 而不是字符串 ('bar' - 注意 引号)。它之所以有效是因为 PHP 会自动转换一个 裸字符串(一个 不对应任何已知符号的不带引号的字符串)到 包含裸字符串的字符串。例如,如果没有 定义名为 bar 的常量,然后 PHP 将在字符串中替换 'bar' 并使用它。

从上面的文字我不清楚当 PHP 遇到 bar() 时,它不对应于任何已知的符号,即未定义的常量 PHP 实际用它做什么?

PHP 如何将裸字符串 bar 转换为包含裸字符串的字符串,即'bar'

PHP 是否定义了一个常量标题栏并为其分配了字符串值'bar'

点赞bar = 'bar';

如果是,我可以在后面的代码中使用常量bar 吗?

因为在 PHP 中只有一个变量和一个常量可以包含值/保存值,而不是像字符串这样的类型包含/保存任何值。

【问题讨论】:

    标签: php string constants undefined-symbol


    【解决方案1】:

    从上面的文字我不清楚当 PHP 遇到 bar() 时,它不对应于任何已知的符号,即未定义的常量,PHP 实际用它做什么?

    与此行为相关的警告说明了一切,真的:

    Warning: Use of undefined constant bar - assumed 'bar' (this will throw an Error in a future version of PHP)

    裸词被视为一个字符串,而不是一个常量——它的处理方式与您写的'bar' 完全相同。表达式defined('bar') 仍然为假,您代码中bar 的其他实例也会引发警告,并且依赖此行为的代码将在未来的PHP 版本中完全停止工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-11
      • 1970-01-01
      • 2020-07-28
      • 2011-09-02
      相关资源
      最近更新 更多