为什么我可以用非打印字符定义PHP函数?

为什么我可以用非打印字符定义PHP函数?,php,non-printing-characters,Php,Non Printing Characters,我一直认为所有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时,

我一直认为所有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)中显示的实际源代码的屏幕截图,其中显示隐藏字符处于打开状态:

浏览器:



源代码:


我的问题:这是故意的吗?我是否应该能够用非打印字符定义函数/变量,并且仍然让它们完美无缺地工作?如果是,是否有文档记录在某个地方?

我找不到任何关于它的信息,但我(显然)不知道一切

谢谢!

来自:

函数名遵循与PHP中其他标签相同的规则 函数名以字母或下划线开头,后跟任意 字母、数字或下划线的数目。作为正则表达式, 可以这样表达:[a-zA-Z\ux7F-\xff][a-zA-Z0-9\ux7F-\xff]*

如中所述,正则表达式是逐字节应用的,允许使用“许多奇怪的Unicode名称”

这样做会产生一些副作用,正如你所看到的。然而,我无法想象这是PHP背后的人的初衷,这只是他们实现它的方式的直接结果。

来自:

函数名遵循与PHP中其他标签相同的规则 函数名以字母或下划线开头,后跟任意 字母、数字或下划线的数目。作为正则表达式, 可以这样表达:[a-zA-Z\ux7F-\xff][a-zA-Z0-9\ux7F-\xff]*

如中所述,正则表达式是逐字节应用的,允许使用“许多奇怪的Unicode名称”


这样做会产生一些副作用,正如你所看到的。然而,我无法想象这是PHP背后的人的初衷,这只是他们实现它的方式的直接结果。

可能重复@AlmaDo我不认为它是重复的,因为我看不到这个问题的直接答案,那么你最好再说一遍。无意冒犯,但我认为没有比这更清楚、更普遍的答案了(因为这包括了常见情况和所有限制)@AlmaDo这个答案解释了什么是允许的,什么是不允许的。它没有解释这是有意的还是无意的,这是在这里被问到的。可能重复的@AlmaDo我不认为它是重复的,因为我看不到这个问题的直接答案,那么你最好再读一遍。无意冒犯,但没有比这更清楚和常见的答案了我认为(因为这包括了普通情况和所有限制)@AlmaDo这个答案解释了什么是允许的,什么是不允许的。它没有解释这是有意的还是无意的,这是在这里被问到的。我真的建议你重新阅读NikiC的帖子。(提示:“请注意,这个正则表达式是逐字节应用的,不考虑编码。这就是为什么它也是”——引用自此处)@AlmaDo我做了。它很好地解释了当前的规则是什么,但它并没有真正解释这种行为是否是有意的。我不知道如何对此进行评论。如果这是在PHP中定义的,那么,是的,这是有意的。这篇文章澄清了在PHP中是允许的,并且还说明了为什么我不知道如何解释,如果不清楚的话好吧,我们都有自己的观点,所以你可以随意思考。PHP中的每一个实现错误都将“在PHP中定义”.正则表达式的目的与文档中的一样,但是不考虑字符集的逐字节比较可能只是一个实现错误。但是好吧,我们在这里不同意。我真的建议您重新阅读NikiC的帖子。(提示:“请注意,这个正则表达式是逐字节应用的,不考虑编码。这就是为什么它也是”——引用自此处)@AlmaDo我做了。它很好地解释了当前的规则是什么,但它并没有真正解释这种行为是否是有意的。我不知道如何对此进行评论。如果这是在PHP中定义的,那么,是的,这是有意的。这篇文章澄清了在PHP中是允许的,并且还说明了为什么我不知道如何解释,如果不清楚的话好吧,我们都有自己的观点,所以你可以随意思考。PHP中的每一个实现错误都将“在PHP中定义”.regex的用途与文档中的一样,但是不考虑字符集的逐字节比较可能只是一个实现错误。但是好吧,我们在这里不同意。