2010-04-23 2 views
0

마술 방법을 사용하는 경우. 리플렉션 API를 사용하는 동안 클래스 속성을 조사 할 수 없습니다. 왜 그렇습니까?Magic methods + Reflection API = 클래스 속성을 조사 할 수 없습니다. 왜?

편집

반사 API는 무엇입니까? PLS 제가 그 이해 didnt한다 php.net으로 참조하지 않습니다 .. 단어가 속성에 액세스 마법 방법을 사용하여

+0

작동하지 않는 부분에 대해보다 구체적인 세부 정보를 제공 할 수 있으며이를 달성하기 위해 어떻게 시도합니까? – Savageman

+0

나는 마술 방법의 제한 ...로이이 문제를 언급 한 책을 통해 진행하고, 표시하고 그게 모든 것을 그 기본적으로 사용 뭐죠 나는 반전과 핵심 단어 "Reflecton API"를 요청 ... 그것에 대해 –

답변

2

을 plsss에 나를 인도, 이러한 속성은 일반적으로 클래스의 정의에 존재하지 않습니다.

일반적으로 다음과 같이 표시됩니다 귀하의 클래스의 정의 : 더 실제 속성이 없기 때문에

class MyClass { 
    private $data; 
    public function __get($name) { 
     return $this->data[$name]; 
    } 
    public function __set($name, $value) { 
     $this->data[$name] = $value; 
    } 
} 


- 마법의 방법 __get에 의해 사용됩니다 만 $data 배열에있다, 큰 데이터 저장소로 __set - Reflection API에서 볼 수 없습니다. 과 반사 API는 거기에 무엇을 볼 수 있습니다 - 거기있다는 액세스 속성 에 사용된다 (또는 방법, __call와) : 마법 방법을 사용하여 발생하는 문제 중 하나

.

+0

을 알고 .. 그리고 y는 위에서 지정한 것을하지 않습니다. –

-2

가능한 용액 보호에 $의 데이터 범위가 증가 될 수있다 : 그들은 적합하다고 런타임 정의 속성을 수집로

class MyClass { 
    protected $data; 
    public function __get($name) { 
     return $this->data[$name]; 
    } 
    public function __set($name, $value) { 
     $this->data[$name] = $value; 
    } 
} 

이 방법으로 확장 클래스 어레이를 액세스 할 수있다.

관련 문제