Kor*_*tak 7 php variables object names variable-variables
在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中的变量名称有哪些规则?
Tim*_*tle 15
从手册:
变量名称遵循与PHP中其他标签相同的规则.有效的变量名称以字母或下划线开头,后跟任意数量的字母,数字或下划线.作为正则表达式,它将表达如下:
'[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'
因此,如果您通过RegEx运行字符串,您应该能够判断它是否有效.
应该注意,使用变量变量访问"无效"Object属性名称的能力是某些XML解析的正确方法.
例如,来自SimpleXML文档:
访问包含PHP命名约定下不允许的字符的XML文档中的元素(例如连字符)可以通过将元素名称封装在大括号和撇号中来实现.
接下来是这个代码示例:
echo $xml->movie->{'great-lines'}->line;
Run Code Online (Sandbox Code Playgroud)
因此,拥有只能以这种方式访问的属性并不一定是错的.
但是,如果您的代码都创建并使用了对象 - 那么您会想知道为什么要使用这些属性.当然,允许类似于SimpleXML示例的情况,其中创建对象以表示控件范围之外的内容.
因为它已被回复,但没有完整的代码行:
if ( preg_match('/^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*$/','evaluation string') )
{
// the string is valid
}
else
{
// the string is not valid
}
Run Code Online (Sandbox Code Playgroud)