[php] 문자열로 PHP 클래스 속성 가져 오기

문자열을 기반으로 PHP에서 속성을 얻는 방법은 무엇입니까? 전화하겠습니다 magic. 그래서 무엇 magic입니까?

$obj->Name = 'something';
$get = $obj->Name;

마치 …

magic($obj, 'Name', 'something');
$get = magic($obj, 'Name');



답변

이렇게

<?php

$prop = 'Name';

echo $obj->$prop;

또는 클래스를 제어 할 수있는 경우 ArrayAccess 인터페이스를 구현 하고이 작업을 수행하십시오.

echo $obj['Name'];


답변

중간 변수를 만들지 않고 속성에 액세스하려면 다음 {}표기법을 사용하십시오 .

$something = $object->{'something'};

또한 예를 들어 루프에서 속성 이름을 만들 수 있습니다.

for ($i = 0; $i < 5; $i++) {
    $something = $object->{'something' . $i};
    // ...
}


답변

당신이 요구하는 것은 Variable Variables 입니다. 문자열에 변수를 저장하고 다음과 같이 액세스하면됩니다.

$Class = 'MyCustomClass';
$Property = 'Name';
$List = array('Name');

$Object = new $Class();

// All of these will echo the same property
echo $Object->$Property;  // Evaluates to $Object->Name
echo $Object->{$List[0]}; // Use if your variable is in an array


답변

이 같은? 테스트하지는 않았지만 정상적으로 작동합니다.

function magic($obj, $var, $value = NULL)
{
    if($value == NULL)
    {
        return $obj->$var;
    }
    else
    {
        $obj->$var = $value;
    }
}


답변

속성 이름을 변수에 저장하고 변수를 사용하여 속성에 액세스하십시오. 이처럼 :

$name = 'Name';

$obj->$name = 'something';
$get = $obj->$name;


답변

이 질문에 대한 답변이있을 수 있지만 PHP 7 로의 마이그레이션을 원할 수 있습니다

이전 버전과 호환되지 않는 변경

출처 : php.net


답변

$ obj-> {$ obj-> Name}은 중괄호가 변수를 변수처럼 속성을 래핑합니다.

이것은 최고 검색이었습니다. 그러나 $ this를 사용하는 내 질문을 해결하지 못했습니다. 중괄호를 사용하는 환경의 경우에도 도움이되었습니다 …

Code Igniter를 사용한 예제 인스턴스 가져 오기

부모 클래스 인스턴스가있는 소스 라이브러리 클래스에서

$this->someClass='something';
$this->someID=34;

부모 인스턴스와 함께 다른 클래스에서 소스 해야하는 라이브러리 클래스

echo $this->CI->{$this->someClass}->{$this->someID};