我正在使用 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中只有一个变量和一个常量可以包含值/保持该值而不是类似字符串包含/保持任何值。
答案 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的未来版本中工作。