PHP 通过数组中的字符串访问嵌套对象属性

标签 php oop properties

假设我们有一个对象 $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' 不是一个选项!;))?

最佳答案

如果你想把它做成一行或者更漂亮一点,你可以试试这个:

echo json_decode(json_encode($obj), true)['p1']['p2']['p3']; // PHP 5.4

或者对于 PHP 5.3:

$arr = json_decode(json_encode($obj), true);
echo $arr['p1']['p2']['p3'];

这是你想要实现的目标吗?

关于PHP 通过数组中的字符串访问嵌套对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27548796/

相关文章:

php - Symfony2 验证日期时间 1 应该在日期时间 2 之前

c++ - 如何在 E_NOTIMPL 和 E_NOINTERFACE 之间进行选择?

java - 如何从存储在接口(interface)文件中的数组中选择随机元素?

使用属性时的 C# 歧义错误

c# - 属性类可以在不使用实例化的情况下被其他类访问吗?

c# - 循环属性时无法评估 List 的类型

PHP 文件不会在浏览器中更新

php - 在 PHP 中删除字符串开头的几个字符?

php - 处理消息队列中的重复

data-structures - OO 设计问题——父/子(人)——通函?