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

问题描述 投票:0回答:1

我正在使用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个回答
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的未来版本中运行。

© www.soinside.com 2019 - 2024. All rights reserved.