【发布时间】:2023-03-14 17:36:01
【问题描述】:
假设我们有一个对象 $obj。该对象具有如下属性:
$obj->p1->p2->p3 = 'foo';
现在我得到一个数组中的嵌套属性结构:
$arr = array( 'p1', 'p2', 'p3' );
目前我使用以下函数来相应地访问该属性:
function getProperty( $obj, $property ) {
foreach( $property as $p ) {
$obj = $obj->{$p};
}
return $obj;
}
$value = getProperty( $obj, $arr); // = 'foo'
有没有更聪明的方法来做到这一点(不,'eval' 不是一个选项!;))?
【问题讨论】:
-
如果它有效,你为什么要改进它。
-
没有急需改变它。但是好像有点复杂,不是很优雅。
-
此外,这是一个非常复杂的脚本的一部分,执行时间是一个相关点......
-
我不认为你可以让它“更漂亮”。这是使用 array_reduce 的 foreach 的替代方法。 function getProperty($object, array $keys) { return array_reduce($keys, function($carry, $item) { return $carry->{$item}; }, $object); }
-
谢谢!我越想,我就越觉得真的没有“更漂亮”的方式。 ;)
标签: php oop properties