2010-12-15 4 views
1

는이 같은 (sfDoctrineRecord :: __() 메서드 호출에 의해 처리되는) ​​프로퍼티 게터 메소드를 오버라이드 (override)하려고합니다. 그것은 가능하고 어떻게?재정의 교리 마법 접근 방법

답변

7

다음과 같이하십시오.

0

DoctrineRecord.__call 메서드 내에는 메서드 호출을 시도하는 call_user_func_array 메서드가 사용됩니다.

getProperty을 재정의 했으므로 하위 클래스 정의를 호출하므로 자체를 호출합니다. 또한,

public function getProperty() 
{ 
    $property = $this->_get('property'); 
    //the following line is never reached 
    return $property; 
} 

을 사용자 정의 뮤 테이터 및 접근에 대해 읽어 :

+0

그래서, 불가능합니까? – Dziamid

+0

'parent :: getProperty()'메쏘드가'__call' 메쏘드를 사용하고 있다면,'getProperty'를 오버라이드하면'parent :: getProperty()'가 자식 메쏘드를 계속해서 호출하게됩니다. 이 작업을 수행하려면 하위 클래스에서 상위 getProperty 메서드의 기능을 복제해야한다고 생각합니다. 그러나, 만약 여러분의 자식 클래스의'getProperty' 메소드가 위에서 보여준 것처럼 간단하다면, 그것을 오버라이드 할 필요가 없습니다. 부모의 버전이 당신이 원하는 것을 할 것입니다. – bejonbee

+0

아니, 아니, 나는 약간의 논리를 적용하려고했다. 의견을 주셔서 감사합니다 직접 _get() 메서드를 호출하여 해결 : $ 속성 = $ this-> _ get ('Property') – Dziamid