我一直认为所有php函数都必须以[a-zA-Z]
开头。
例如,这可行:
function a1() {
return "Something, because I'm written properly.";
}
......虽然这不会:
function 1a() {
return "Nothing, because you'll encounter an error before this function ever runs.";
}
然而,当显示它的文档具有声明的内容类型UTF8时,由rawurldecode('%E2%80%A9')
显示的字符也可用于定义函数。
在不显示隐藏字符的文本编辑器中,它最终看起来该函数已被定义为function () {
,然后可以通过调用(看起来不多于();
来执行该函数
我无法粘贴源代码并让它仍然正常显示,所以这里有一些截图。第一个是我浏览器中显示内容的屏幕截图,第二个是我的文本编辑器(TextWrangler)中显示的实际源代码的屏幕截图,其中显示隐藏字符已打开:
浏览器:
源代码:
我的问题:这是故意的吗?我是否应该能够使用非打印字符定义函数/变量,并且仍然能够完美地工作?如果是这样,它是否在某处记录?
我找不到任何关于它的信息,但我(显然)并不知道一切。
谢谢!
答案 0 :(得分:1)
来自manual:
函数名称遵循与PHP中其他标签相同的规则。一个有效的 函数名称以字母或下划线开头,后跟任何字符 字母,数字或下划线的数量。作为正则表达式, 它将如此表达:[a-zA-Z_ \ x7f- \ xff] [a-zA-Z0-9_ \ x7f- \ xff] *。
正如other answer linked中所解释的那样,正则表达式是每字节字节应用的,允许“许多奇怪的Unicode名称”。
这样做有一些像你见过的副作用。但是,我无法想象这是PHP背后的人的最初意图,它只是他们实现它的方式的直接结果。