2

我一直认为所有 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.";
}

然而,作为结果显示的字符rawurldecode('%E2%80%A9'),当显示它的文档具有声明的 UTF8 内容类型时,也可用于定义函数。

在不显示隐藏字符的文本编辑器中,它最终看起来该函数已被定义为function () {然后可以通过调用来执行(看起来不超过)();

我无法粘贴源代码并让它仍然正确显示,所以这里有一些屏幕截图。第一个是在我的浏览器中显示的屏幕截图,第二个是在我的文本编辑器 (TextWrangler) 中显示的实际源代码的屏幕截图,其中显示隐藏字符打开:

浏览器:


在此处输入图像描述


源代码:


在此处输入图像描述

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

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

谢谢!

4

1 回答 1

2

手册

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

正如在另一个答案中所解释的那样,正则表达式逐字节应用,允许“许多奇怪的 Unicode 名称”。

这样做会产生一些副作用,就像您已经看到的那样。但是,我无法想象这是 PHP 背后人们的初衷,这只是他们实现它的方式的直接结果。

于 2013-11-01T07:08:09.367 回答