用于嵌套属性的php动态属性访问器

时间:2018-04-23 17:07:54

标签: php

我能做到:

$key = 'address';
$user->{$key}

有没有办法让这项工作更深层次?我事先并不知道有多少级别。

$key = 'address->street';
$user->{$key}

这是我实际想要实现的目标:

$filterIds = [];
$filterIds['facebook->followers'] = 1;
$filterIds['googleplus->followers'] = 2;
$filterIds['instagram->followers'] = 3;
...

    foreach($filterIds as $filterKey => $filterId) {
        if(self::property_path_exists($data, $filterKey)) {
            $filter = new ResultFilter;
            $filter->result_filter_id = $filterId;
            $filter->value = $data->{$filterKey};
            $filter->save();
        }
    }

1 个答案:

答案 0 :(得分:1)

实施例

<?php

$v = new stdClass;
$v->x = new stdClass;
$v->x->y = new stdClass;
$v->x->y->z = "wow";

$keys = "x->y->z";

$t = &$v;
foreach (explode("->", $keys) as $key) {
    // @TODO add isset($t->{$key})
    $t = &$t->{$key};
}

print($t . PHP_EOL);

$t = "changed";

print($v->x->y->z . PHP_EOL);

如果要编辑此嵌套对象,请记住使用引用(&)。