2010-07-10 3 views
0

나는 일해야한다고 생각하는 것이 있지만 그렇지 않습니다.PHP가 부모 클래스에서 함수 오버로드

여러 Controller _ ## 클래스가 있는데, 모두 Controller_Core에서 확장됩니다. 각 Controller _ ## - 클래스에는 Save() 공용 함수가 있습니다. 이제 나는 다른 일반적인 검사 (각 $ _POST-var에 대한 addslashes)를 수행하기를 원했고 Controller_Core에 public function Save()를 추가하면 이것이 ## - 클래스가 확장되므로 기본적으로 실행될 것이라고 생각했습니다 . 그러나 이것은 사실이 아닙니다.

내 질문; 내가 성취하려는 일이 가능한가? 또는 나는 이것이 이제까지 작동 할 것이라는 점을 생각해서 틀린가?

답변

5

하위 클래스 버전의 메서드에서 parent::Save()으로 호출하십시오.

http://php.net/manual/en/keyword.parent.php을 참조하십시오.

+0

이 필요가 없습니다 : 당신은에로, 아이들의 수업에 특정 코드를 작성

class Controller_Core { public function save() { if (! $this->_validateInfo()) { return false; } return $this->_doSave(); } protected function _validateInput() { //-- do stuff return true; } protected function _doSave() { //-- do stuff return true; } } 

첫 번째 라인이 될 수도 있습니다 '::' –

+0

"하위 클래스의 첫 번째 줄"은 첫 번째가 될 필요는 없지만 클래스가 아닌 함수에 있어야합니다. – jigfox

+0

@Jens : 왜 첫 번째 줄, 우리는 할 수 없습니까? 함수를 무시하고 그 실행의 모든 ​​지점에서 부모를 호출 할 수 있습니까? –

1

또는 당신은 당신의 핵심 클래스에 공통적 인 행동을 추출 리팩토링을 적용 할 수 :

class Controller_Extended extends Controller_Core { 

    protected function _doSave() { 

     //-- a new return 
     return true; 
    } 
}