以编程方式访问PHP对象内容,即使在更深层次

时间:2013-12-14 19:07:59

标签: php arrays object

当你只设置一个像这样的单一级别时,

访问PHP中的对象内容工作正常:

$obj = new stdClass();
$obj->name1 = 'value1';
$param1 = 'name1';
echo $obj->$param1; // echoes values1 as expected

但是如果我需要更深层次的对象内容(无需将其转换为数组或类似的东西......)

$obj = new stdClass();
$obj->name1->name2 = 'value2';
$param2 = 'name1->name2';
echo $obj->$param2; // does not echo value2 obviously

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

第一种方法(简单):

$obj = new stdClass();
$obj->name1->name2 = 'value2';
$param1 = 'name1';
$param2 = 'name2';
echo $obj->$param1->$param2;

第二种方法(更全面):

$obj = new stdClass();
$obj->name1->name2 = 'value2';
$params = 'name1->name2';

$value = $obj;
foreach(preg_split("/-\>/",$params) as $param)
    $value = $value->$param;

echo $value;

答案 1 :(得分:0)

可以只解析$param2字符串并在结尾打印出值:

$result = $obj;
foreach( explode( '->', $param2) as $var) {
    $result = $result->$var;
}
echo $result;

但是......我不明白为什么你不会为此使用数组。