给出一个类似于“ person.addressHistory [2] .town”的字符串,我如何确定该字符串是否指向实际存在的属性。要使其有效;
理想情况下,我想做类似if(property_exists($ myObject,'person.addressHistory [2] .town');
我考虑过在点上爆炸,然后尝试创建一个递归函数,该函数可以深入到对象层次结构中。
答案 0 :(得分:2)
除点.
外,此点应正确eval
。因此,让我们替换它们:
$string = str_replace('.', '->', $string);
$result = eval("return isset(\$myObject->$string);");
您只能验证允许的字符:
if(!preg_match('/[^A-Z0-9\[\].]/i', $string)) {
$string = str_replace('.', '->', $string);
$result = eval("return isset(\$object->$string);");
} else {
$result = false;
}
使用.
表示法可以实现其他解决方案,但是使用该数组语法[n]
可能会很长且混乱。