Php 如何获取对象属性->;属性,该属性来自stdClass,并带有表示它的字符串

Php 如何获取对象属性->;属性,该属性来自stdClass,并带有表示它的字符串,php,object,properties,stdclass,Php,Object,Properties,Stdclass,我的情况很简单,但我仍然在寻找一个简单的解决方案。 我的情况如下: 我收到一个soap响应对象,该对象与对另一个对象的调用不同。 有时,这些属性本身就是对象,并且可能具有我们必须获得的属性。为此,为每种类型的调用设置一个数组,以选择所需的数据并丢弃其余的数据 例如,在调用中,我们接收到如下对象: (我通过模拟接收到的对象使代码易于测试) 我想检查$objTest->Content2->prop3是否存在,但我不知道在什么时候我正在寻找它,因为我正在寻找的是关联数组 调用的数组如下所示: $map

我的情况很简单,但我仍然在寻找一个简单的解决方案。 我的情况如下:

我收到一个soap响应对象,该对象与对另一个对象的调用不同。 有时,这些属性本身就是对象,并且可能具有我们必须获得的属性。为此,为每种类型的调用设置一个数组,以选择所需的数据并丢弃其余的数据

例如,在调用中,我们接收到如下对象: (我通过模拟接收到的对象使代码易于测试)

我想检查$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";
    }
}
但不适用于另一个,因为引用“->”

现在我的问题是: 有没有办法获取上面显示的未知对象的未知属性

这是先前测试的结果:

对象测试的转储:

对象(stdClass)[1]

尝试使用字符串访问对象content2的proprerty prop3:

获取值的标准方法:$objTest->Content2->prop3

结果:3

测试字符串:“Content3”

结果:3

测试提示:“内容2->prop3”

(!)注意:未定义的属性:stdClass::$Content2->prop3

希望我能用一切来帮助了解我的处境


谢谢

我不知道有什么内置PHP函数可以做到这一点,但是可以使用一个函数来分解属性字符串,并遍历它们以找到字符串中最后一个属性的值

function get_property($object, $prop_string, $delimiter = '->') {
    $prop_array = explode($delimiter, $prop_string);
    foreach ($prop_array as $property) {
        if (isset($object->{$property}))
            $object = $object->{$property};
        else
            return;
    }
    return $object;
}

正是我想要的。我对它做了一点修改,但所有的基础都在那里!非常感谢你!
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)
function get_property($object, $prop_string, $delimiter = '->') {
    $prop_array = explode($delimiter, $prop_string);
    foreach ($prop_array as $property) {
        if (isset($object->{$property}))
            $object = $object->{$property};
        else
            return;
    }
    return $object;
}