有许多与此类似的问题,但是这略有不同,因为它是关于深度对象属性访问的,而不仅仅是深度的一个级别。
假设我有一个包含字符串foo.bar
的变量。
$user = new User();
$user->foo = new Foo();
$user->foo->bar = "Hello World";
$variable = "foo.bar"
我想通过使用
$user->foo->bar
来回显$variable
:echo $user->foo->bar
到目前为止,这是我尝试过的尝试,但没有成功(显示为NULL):
$value = str_replace(".", "->", $value);
echo $user->{$value};
最佳答案
使用可变属性符号($o->$p
)减少对象路径非常容易:
$path = 'foo.bar';
echo array_reduce(explode('.', $path), function ($o, $p) { return $o->$p; }, $user);
这很容易变成小助手功能。