mar*_*rio 12 php unicode identifier
PHP无论如何都允许变量,函数,类和常量的Unicode标识符.它当然是为本地化应用程序.除了英语是有争议的,在任何事情上编写API都是一个好主意,但是一些开发设置可能要求它是无可争议的.
$Schüssel = new Müsli(T_FRÜCHTE);
Run Code Online (Sandbox Code Playgroud)
但PHP不仅仅是\p{L}标识符.您可以使用几乎任何Unicode字符,但ASCII范围除外(例如:,特殊情况或\已经用作支持命名空间的内部黑客).
无论如何,您可以这样做,我甚至认为这对于有趣的项目是可行的:
throw new ?_?("told you about the disk space before");
Run Code Online (Sandbox Code Playgroud)
但除了本地化,娱乐和装饰效果之外,使用Unicode标识符是可取的吗?
例如,我正在考虑将参数嵌入到魔术方法名称中.在我的情况下,我只需要注入数字参数,所以只用下划线就可以了:
$what->substr_0_50->ascii("text");
// (Let's skip the evilness discussion this time. Not quite sure
// yet if I really want it, but the conciseness might make sense.)
Run Code Online (Sandbox Code Playgroud)
但如果我想嵌入其他文本参数,我需要另一个unicode字符.现在更难打字,但如果有一个有助于提高可读性并传达意义......?
->substr?0?50-> // doesn't look good
Run Code Online (Sandbox Code Playgroud)
因此,在这种情况下的问题:哪个符号作为虚拟函数名称中的混合参数的分隔符是有意义的. - 更广泛的元主题:你知道哪些使用Unicode标识符,或者你会考虑好吗?
Nik*_*kiC 22
只是要清楚:PHP并不能支持Unicode.它不支持Unicode标签.更确切地说,PHP定义了一个LABELas [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*.正如您在此处所看到的,除了典型的字母数字+下划线外,它只允许一小部分字符.您的Unicode标签仍然被接受这一事实只是一个事实,即PHP没有Unicode支持.你的特殊字符在UTF-8中是几个字节长,PHP将这些字节中的每一个视为一个单独的字符,并且不小心 - 使用你尝试过的字符 - 每个字符都与\x7f-\xff上面提到的范围相匹配.
关于该主题的进一步阅读:方法,常量,变量和字段的异国名称 - Bug或功能?
哪个符号作为虚函数名称中混合参数的分隔符是有意义的。
\u2639?
但除了本地化、娱乐和装饰效果之外,Unicode 标识符的哪些用途是可取的?
字体支持后的最大障碍将是使字符成为可以输入的字符。在宏或复制/粘贴之外,unicode 字符并不容易输入。将这一点强加给其他人很可能会违反“假设那些在你知道你住在哪里的凶残的精神病患者之后使用你的代码的人”规则。
我们仅在代码库中的少数注释中使用 unicode 字符,例如
// Even though this is the end of the file and we should get an implicit exit,
// if we don't actually expressly exit here, PHP segfaults.
// ? Oh, PHP, I love you. ?
Run Code Online (Sandbox Code Playgroud)
我认为这属于“娱乐和装饰”类别。或者“杀掉 php-internals 团队后向自己开枪”类别。选一个。
无论如何,这不是一个好主意,因为它会使您的代码难以修改。