有许多与此类似的问题,但是这略有不同,因为它是关于深度对象属性访问的,而不仅仅是深度的一个级别。

假设我有一个包含字符串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);

这很容易变成小助手功能。

09-16 01:33
查看更多