我使用的是PHP7.0.2
请考虑PHP手册中的以下案文:
为什么 $foobar 是错的? 始终在字符串文本数组索引周围使用引号。例如,$foo‘’bar‘是正确的,而$foobar则不正确。但是为什么呢?在旧脚本中遇到这种语法是很常见的:这是错误的,但它有效。原因是这段代码有一个未定义的常量(bar),而不是字符串('bar‘-注意引号)。它的工作原理是PHP自动将一个裸字符串(一个不对应于任何已知符号的未引号的字符串)转换为一个包含裸字符串的字符串。例如,如果没有定义的常量名为bar,那么PHP将在字符串'bar‘中替换并使用它。
从上面的文本中,我不清楚当PHP遇到与任何已知符号(即未定义的常量)不对应的bar()时,PHP实际对它做了什么?
PHP如何将裸字符串bar转换为包含裸字符串的字符串,即'bar'
PHP是否定义了一个名为bar的常量,并将字符串值'bar'分配给它?
就像bar = 'bar';
如果是,我可以在进一步的代码中使用常量bar吗?
因为在PHP中,只有变量和常量可以包含值/保持值,而不能像字符串那样包含/保存任何值。
发布于 2017-12-27 03:04:41
从上面的文本中,我不清楚当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中工作。
https://stackoverflow.com/questions/47985749
复制相似问题