PHP如何处理未定义的常量?

时间:2017-12-27 02:50:46

标签: php string constants undefined-symbol

我正在使用 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转换为包含裸字符串{@ 1}}的字符串?

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

'bar'

如果是,我可以在更进一步的代码中的某处使用常量bar = 'bar';吗?

因为在PHP中只有一个变量和一个常量可以包含值/保持该值而不是类似字符串包含/保持任何值。

1 个答案:

答案 0 :(得分: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的未来版本中工作。