我理解下划线_
是命名变量/函数/类等的可接受字符.但是我想知道是否还有其他特殊字符可以使用.我测试了一些没有运气并且已经假设很长时间没有,但我想我会看到是否有其他人知道肯定.这主要是为了审美目的,但是我想在与其他开发人员合作定义值类型等时,特殊的字符命名约定会很有用.
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标识符,或者你会考虑好吗?
在PHP中,可以使用变量变量......
例如...
class obj { }
$fieldName = "Surname";
$object = new obj();
$object->Name = "John";
$object->$fieldName = "Doe";
echo "{$object->Name} {$object->Surname}"; // This echoes "John Doe".
Run Code Online (Sandbox Code Playgroud)
但是,$ fieldName字符串可能包含变量名称中不允许的某些字符.PHP仍然会创建具有该名称的字段(很像关联数组),但我无法使用$ object - > ......访问它,因为它无法正确解析.
现在,是否有任何函数可以检查字符串是否可以用作有效的PHP变量名.如果没有,如何使用正则表达式创建它?PHP中的变量名称有哪些规则?
我有一个对象:
stdClass Object
(
[Color] => Red
[Shape] => Round
[Taste] => Sweet
)
Run Code Online (Sandbox Code Playgroud)
我想修剪对象中的每个元素,如果该元素为空,则将其设置为"N/A"
所以这个对象:
stdClass Object
(
[Color] => Red
[Shape] =>
[Taste] => Sweet
)
Run Code Online (Sandbox Code Playgroud)
会变成这样的:
stdClass Object
(
[Color] => Red
[Shape] => N/A
[Taste] => Sweet
)
Run Code Online (Sandbox Code Playgroud)
我该如何实现这一点,也许是array_walk?