2012-03-05 6 views
0

특히 Yii 프레임 워크를 사용하고 있으며 __set 메서드를 재정 의하여 해당 모델을 채 웁니다.겹쳐서 설정 한 클래스 속성을 검사하는 방법

그러나 xdebug를 사용하여 모델 클래스의 인스턴스를 검사 할 때 이러한 속성을 볼 수 없습니다.

어떻게 검사 할 수 있습니까?

+0

방금 ​​객체를 화면에 인쇄하면 볼 수 있습니까? – Anthony

+0

@Anthony 확실한 - 명시 적으로 속성을 참조하는 경우. 그게 내 질문에 대답하는 데 어떻게 도움이됩니까? – SystemicPlural

+0

글쎄, 그게 내 질문이 아니야. 전체 개체 변수의 print_r을 수행하고 속성을 볼 수 있는지 알고 싶습니다. setter를 통해 속성을 설정하면 속성을 명시 적으로 참조 할 때 getter를 통해 가져옵니다. 즉, 속성에 직접 액세스 할 수 없다는 의미입니다 (개인용 또는 보호용). 즉, xdebug는 값을 표시 할 수 없다는 것을 짐작할 수 있습니다. 내가 옳다면 그것은 그것이 당신의 질문에 대답하는 데 도움이되는 방법입니다. – Anthony

답변

0

YII의 마법 __get/__set 재정의 불투명 게터/세터 메소드 (이 경우 검사 아무 것도 없을 수 있음) 또는 행동을 통해서 구현 될 수있는 요소 속성에 대한 원 스톱 쇼핑이 될 것을 의미한다. 구성 요소에 첨부 된 비헤이비어는 CComponent::$_m 개인 변수에 저장되므로이 경우 Yii처럼 수행해야합니다. $_m으로 드릴 다운하고 속성 (있는 경우)이 해당 속성을 구현하는지 확인합니다.

+0

나열된 xdebug 변수에는 local vars 및 해당 하위 변수 이외의 값이 없습니다. 이 작업을 수행하려면 모델 속성을 검사하기 위해 코드를 편집해야한다고 생각하는 것이 맞습니까? 나는 잠깐 또는 영구적으로 모델 코드 – SystemicPlural

+0

에 속성을 추가하는 것이 더 쉽다고 생각합니다. 죄송 합니다만 xdebug는 클래스 변수도 표시합니다. $ this를 확장하십시오! 그러나 정적 속성 인 경우 곧 해제 될 Xdebug 2.2-dev (github에서)가 필요합니다. – Derick

1

나는 또한 Yii forum에서이 질문을했습니다.

루크의 유용한 제안은 변수에 대한 감시를 설정하는 것입니다.

0

Yii가 getter 및 setter를 사용하는 경우 속성이 개인용 또는 보호용임을 의미합니다. 모든 xdebug가 print_r의 멋진 버전 인 경우, 나는 (보호 된 속성에 대해 잘못 될 수 있다고 생각하는) 두 가지 중 하나를 보지 않을 것이라고 생각합니다. Yii 속성이 비공개 인 경우 xdebug는 속성 이름을 알지 못하므로 이름으로 속성을 검색 할 수 없습니다 (getter 메서드를 트리거 함).

간편한 테스트는 화면에 전체 개체의 print_r 또는 vardump를 수행하는 것입니다 (읽기 쉽도록하려면 <pre>을 사용하고 어떤 속성이 보이고 어떤 것이 아닌지 확인하는 것이 좋습니다). xedebug가 보여주는 것과 동일한 것들이 있다면 xedebug가 객체 속성을 얻기 위해 사용하는 어떤 수단을 사용해서도 얻을 수 없기 때문입니다.

모든 속성을 볼 수 있다면 여전히 올바른 위치에있을 수 있지만 실제 원인을 추측 할 수는 없습니다.

+0

Xdebug는 * all * 속성을 표시합니다. 공개, 비공개 및 보호. – Derick

0

CActiveRecord의 경우 특성 멤버에 설정됩니다. 관심있는 클래스의 상위 클래스 구현을 확인하십시오.

관련 문제