2011-03-21 4 views
4

나는 부모 클래스에 funcB() 함수를 포함하고 있습니다.이 함수는이 함수를 약간만 변경하여 더 나은 함수로 재정의하려고합니다. 부모 클래스의이 함수는 같은 클래스의 다른 private 함수를 호출합니다.확장 클래스에서 개별 통화를 하시겠습니까?

샘플 코드 : 나는 ClassB가 내에서 개인의 부모를 호출 :: funcA() 함수를 만들 수 아니에요 때문에

class classA { 
    private function funcA() { 
    return "funcA called"; 
    } 

    public function funcB() { 
    $result = $this->funcA(); 
    return $result; 
    } 
} 

class ClassB extends ClassA { 
    public function funcB($a) { 
    //do some more stuff 
    $result = $this->funcA(); 
    return $result; 
    } 
} 

나는, 치명적 오류가 발생합니다. 그러나 그 부름은 반드시 이루어져야합니다. 이것은 어떻게 아직도 가능합니까?

답변

11

대신 private 메서드를 protected으로 선언하십시오.

See the documentation about visibility

는 :

클래스 멤버 어디서나 액세스 할 수있는 공개 선언했다. protected로 선언 된 멤버는 클래스 자체 및 상속 된 클래스와 부모 클래스에서만 액세스 할 수 있습니다. 비공개로 선언 된 멤버는 멤버를 정의하는 클래스에서만 액세스 할 수 있습니다.

+0

고마워요! ClassA의 설계에 결함이 있다는 뜻입니까? (내가 알고있는 ClassA를 디자인하지 않았다.) – netiul

+0

@Zac L : 음, 처음에는'funcA'가 서브 클래스 * 또는 *에 의해 호출되지 않아야한다는 것을 의미한다.'classA'는 서브 클래스 화되지 않았다. 어쩌면 원저자는이 시나리오에 대해 생각하지 않았을 것입니다. 나는 그것이 잘못된 디자인이라고 말하지 않을 것이다. –

관련 문제