PHP:通过点号表示法访问嵌套对象属性

3

如何用"点表示法"字符串访问对象的嵌套属性?

例如:

#..........................Classes..........................

class Colour            |   class Eye       |   class Person
{                       |   {               |   {
    $hexValue = #36ff00 |       $colour;    |       $eyes;
}                       |   }               |   }

#..........................Example..........................

$john = new Person;

$eyes = [new Eye, new Eye];

$eyes[0]->color = new Colour;

$eyes[1]->color = new Colour;

$john->eyes = [new Eye, new Eye];

#..........................Question..........................

# How can we do something like this?

$eyeColour = Helper::dot($john, 'eyes[0].colour.hexValue'); 

刚刚在15分钟前被问到了,与此相关的内容可以参考该网站:http://stackoverflow.com/q/38087608/3933332。同时,您还可以查看评论获取更多想法。 - Rizier123
对于数组访问,有大量的示例和包处理数组点访问。但是没有针对对象/类实例的。 - AndrewMcLagan
1个回答

7

没有一种简单的方法来实现这个。你需要解析路径字符串,然后逐步到达所需的值。

请查看Symfony PropertyAccess组件。它可以作为一个独立的库使用,而无需其他框架。

use Symfony\Component\PropertyAccess\PropertyAccess;

$accessor = PropertyAccess::createPropertyAccessor();

$eyeColour = $accessor->getValue($john, 'eyes[0].colour.hexValue');

完美,我之前确实遇到过这个库。使用库而不是示例的方法值得点赞。 - AndrewMcLagan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接