2013-10-30 2 views
1

나는문자열에서 객체의 속성에 액세스하면

var_dump($obj->{'Test->FGH'}); 

그리고

을 시도

$obj->Test->FGH = "Well Done!"; 

... 단일 문자열에서 속성 값에 액세스 할 수 있도록하고 싶습니다

var_dump(eval('$obj->Test->FGH')); 

알고 있습니다. 다음과 같이 작동하지만 문자열로 정의해야합니다.

var_dump ($obj->Test->FGH); 

나는 다음과 같이 작동하지만 FGH 속성에 액세스하지 못한다는 것을 알고 있습니다.

var_dump ($obj->{'Test'}); 

문자열에서 $ obj-> Test-> FGH 값을 어떻게 반환 할 수 있습니까?

+0

를 들어, 두 번째 인수로 문자열을 가지고 그것을 수정할 수는 항상 문자열 개체 변수의 첫 번째 부분 (즉,'$ '로 시작)와 나머지는 일련의 속성 이름? – geomagas

답변

0

속성을 찾을 때까지 반복적으로 개체 구조를 반복해야합니다.

다음은 작업을 수행하는 재귀 함수입니다.

검색된 값이 개체가 아닌 경우에만 작동합니다. $props 배열이 비어 있는지 여부에 따라 찾고있는 속성이 객체 인 경우이를 수정해야합니다.

$props 인수는 개체 속성이 중첩 된 것과 같은 방식으로 정렬되어야합니다.

또한 예를 Test/FGH

function search_property($obj, $props) { 

    $prop = array_shift($props); 

    // If this is an object, go one level down 
    if (is_object($obj->$prop)) { 
     return search_prop($obj->$prop, $props); 
    } 

    if (!isset($obj->$prop)) { 
     return false; 
    } 

    return $obj->$prop; 

} 

$val = search_property($obj, array('Test', 'FGH')); 
+0

그것은 유감스럽게도 하나의 문자열이되어야합니다, 좋은 시도! – craig1231

+0

호 나는 이해하지 못했다. 나는 나의 대답을 바꿨다. – mexique1

관련 문제