从字符串访问对象属性


Accessing an Object Property from a string

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

$obj->Test->FGH = "Well Done!";

我试过了

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

var_dump( eval( '$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'));