我的情况很简单,但我仍在寻找一个不错的简短解决方案。这是我的情况:
我收到一个肥皂响应对象,它与对另一个对象的调用不同。有时,这些属性本身就是对象,并且可能具有我们必须获取的属性。为此,为每种类型的调用设置了一个数组,以选择所需的数据并丢弃其余数据。
例如,在一个调用中,我们收到一个像这样的对象:(我通过模拟接收到的对象使代码易于测试)
$objTest = new stdClass();
$objTest->Content1 = "";
$objTest->Content2 = new stdClass();
$objTest->Content2->prop1=1;
$objTest->Content2->prop2=2;
$objTest->Content2->prop3=3;
$objTest->Content3 = 3;
$objTest->Content4 = array('itm1'=>1, 'itm2'=>'two');
我想检查 $objTest->Content2->prop3 是否存在,但我不知道在合适的时候我正在寻找这个,因为我正在寻找的是关联数组。
调用的数组如下所示:
$map = array('Content3','Content2->prop3');
从现在开始,我可以通过执行以下操作获取 Content3 属性的内容:
foreach ($map as $name => $value) {
if (isset($object->$name)) {
echo "$value: ". json_encode($object->$name)."\n";
}
}
但由于引用“->”而不是其他。
现在我的问题是:有没有办法获得如上所示的未知对象的未知属性?
这是之前测试的结果:
objTests 转储:
对象(stdClass)[1]
public 'Content1' => string '' (length=0)
public 'Content2' => object(stdClass)[2]
public 'prop1' => int 1
public 'prop2' => int 2
public 'prop3' => int 3
public 'Content3' => int 3
public 'Content4' => array (size=2)
'itm1' => int 1
'itm2' => string 'two' (length=3)
尝试使用字符串访问对象 content2 的属性 prop3:
获取值的标准方法:$objTest->Content2->prop3
结果:3
测试字符串:“Content3”
结果:3
测试字符串:“Content2->prop3”
( ! ) 注意:未定义的属性:stdClass::$Content2->prop3
希望我尽一切努力帮助了解我的情况!
谢谢!