一尘不染

如何在php中访问名为变量(点表示法)的深层对象属性?

php

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

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

阅读 331

收藏
2020-05-29

共1个答案

一尘不染

使用可变属性符号()可以很容易地 减少 对象路径$o->$p

$path = 'foo.bar';
echo array_reduce(explode('.', $path), function ($o, $p) { return $o->$p; }, $user);

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

2020-05-29