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