2016-06-28 3 views
1

"도트 개념"문자열을 통해 객체의 중첩 된 속성에 액세스하는 간단한 방법은 무엇입니까? 예를 들어PHP : 도트 표기법을 통해 중첩 된 객체 속성에 액세스

:

#..........................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'); 
+0

같은 방향 : http://stackoverflow.com/q/38087608/3933332 방금 전에 물었습니다. 또한 아이디어를 얻기 위해 주석을보십시오. – Rizier123

+0

배열 액세스 용으로, 배열 도트 액세스를 다루는 많은 예제와 패키지가 있습니다. 객체/클래스 인스턴스는 없습니다. – AndrewMcLagan

답변

3

이 작업을 수행 할 간단한 방법 없습니다. 경로 문자열을 구문 분석 한 다음 단계별로 원하는 값에 도달해야합니다.

체크 아웃 Symfony PropertyAccess Component. 나머지 프레임 워크없이 독립형 라이브러리로 사용할 수 있습니다.

use Symfony\Component\PropertyAccess\PropertyAccess; 

$accessor = PropertyAccess::createPropertyAccessor(); 

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

완벽하다. 나는 과거에이 도서관을 실제로 발견했다. 예를 들어 도서관 사용에 +1. – AndrewMcLagan