Php 从字符串访问对象属性

Php 从字符串访问对象属性,php,Php,我希望能够从单个字符串访问属性的值 $obj->Test->FGH = "Well Done!"; 我试过了 var_dump($obj->{'Test->FGH'}); 及 我知道,下面的代码可以工作,但它必须从字符串定义 var_dump ($obj->Test->FGH); 我也知道下面的方法会起作用,但它无法访问FGH财产 var_dump ($obj->{'Test'}); 那么,如何从字符串返回$obj->Test->FGH的值呢?您

我希望能够从单个字符串访问属性的值

$obj->Test->FGH = "Well Done!";
我试过了

var_dump($obj->{'Test->FGH'});

我知道,下面的代码可以工作,但它必须从字符串定义

var_dump ($obj->Test->FGH);
我也知道下面的方法会起作用,但它无法访问FGH财产

var_dump ($obj->{'Test'});

那么,如何从字符串返回$obj->Test->FGH的值呢?

您需要递归地遍历对象结构,直到找到属性为止

这是一个递归函数,它完成了这项工作

仅当搜索的值不是对象时,它才起作用。如果要查找的属性是对象,则必须修改它,具体取决于
$props
数组是否为空

$props
参数的排序方式与对象属性的嵌套方式相同

您还可以将其修改为使用字符串作为第二个参数,例如
Test/FGH

function search_property($obj, $props) {

    $prop = array_shift($props);

    // If this is an object, go one level down
    if (is_object($obj->$prop)) {
        return search_prop($obj->$prop, $props);
    }

    if (!isset($obj->$prop)) {
        return false;
    }

    return $obj->$prop;

}

$val = search_property($obj, array('Test', 'FGH'));

它必须是一个单一的字符串不幸的是,不错的尝试虽然!我不明白,我改变了答案是字符串的第一部分始终是对象变量(即以
$
开头),其余部分是一系列属性名?
function search_property($obj, $props) {

    $prop = array_shift($props);

    // If this is an object, go one level down
    if (is_object($obj->$prop)) {
        return search_prop($obj->$prop, $props);
    }

    if (!isset($obj->$prop)) {
        return false;
    }

    return $obj->$prop;

}

$val = search_property($obj, array('Test', 'FGH'));