未经修饰的美元符号;t投掷错误;PHP处理边缘案例


Unescaped dollar sign doesn't throw error; PHP processing edge case?

我遇到了PHP处理器的一个奇怪的边缘案例。根据PHP手册:

PHP中的变量由美元符号和名称表示变量的。变量名区分大小写。

变量名称遵循与PHP中其他标签相同的规则。有效变量名以字母或下划线开头,后跟任意字母、数字或下划线的数目。

我看到的边缘情况是,紧跟在美元符号后面的字符不是字母或下划线(或其他会调用特殊含义的元字符组合,如第二个美元符号)。这里有一个例子:

$someVariable = "This is a $(test of our edge case).";

我可以用echo语句输出这个变量,单词test之前的美元符号显示出来没有问题(不需要转义)。据我所知,PHP没有抛出任何错误或警告。现在我的问题是:这是处理器语法中的边缘情况吗?是虫子吗?或者这有其他我忽略的解释吗?

我很清楚,作为一种良好的编程实践,当想要打印所述字符时,应该始终在双引号字符串中转义美元符号(或者可以简单地使用单引号字符串)。我只是好奇为什么这种情况不一定需要在美元符号之前进行转义。

否,没有错误消息。PHP将只扩展双引号括起来的字符串中的有效变量。

如果您熟悉正则表达式,您可以将其视为PHP将双引号字符串的内容与以下表达式进行匹配:

'$[a-zA-Z_'x7f-'xff][a-zA-Z0-9_'x7f-'xff]*