2014-11-18 4 views
1

클래스 A와 B 고려 자식 클래스의 오버라이드 (override) 메서드를 호출하는 방법 :PHP OOP - 다음과 같이

Class A { 

    public function A1(){ 
     $this->A2(); 
    } 

    public function A2(){} 

} 

Class B extends A { 

    public function A2() {} // overriding A2 

} 


$instance= new B(); 
$instance -> A1(); // Calling A1 of class B which calls the parent class A1 actually 

당신은 클래스 B는 함수 A2를 무시 볼 수 있듯이. A2는 방법의 A1 클래스에서 호출

문제는

는 어떻게 확인 할 수 클래스 B의 최우선 A2를 클래스 A에서 A2를 호출하지 않는 것이입니다 나는 메소드를 오버라이드 (override)하는 경우 재정의 메서드는 부모 클래스 (A) 메서드에서 호출 된 경우에도 호출됩니다 (실제 개체가 재정의 (B) 클래스의 인스턴스 일 때).

+2

나는 문제를 재현 할 수 없었다. (https://gist.github.com/kojiromike/e74c62a00af63b25b0e1) – kojiro

+0

당신이 원하는 것은 무엇인지 알고 싶습니다. 이것으로 모든 것이 잘됩니다. 클래스 B의 객체를 인스턴스화합니다. A1을 호출하면 A의 A1 메서드가 호출됩니다. 벌금. 그런 다음'$ this'를 호출하면 실제로'B'가됩니다. 그리고'B'는 "A" – vaso123

+2

의'A2' 메소드를 오버 라이팅합니다.'B :: A2'를 호출 할 것입니다. 그것이 당신이 얻는 것이 아니라면, 그 문제를 명확하게 보여주는 예제를 제공하십시오. 이 샘플에서는이 문제를 보여주지 않습니다. – deceze

답변

2

이 질문에 대한 답변이 아니지만 알고 싶습니다. 명확하게, OP가 묻는 것, 코드를 포맷하고 싶습니다.

Class A { 

    public function A1() { 
     echo "Class A, method A1 <br />"; 
     $this->A2(); 
    } 

    public function A2() { 
     echo "Class A, method A2 <br />"; 
    } 

} 

Class B extends A { 

    public function A2() { 
     echo "Class B, method A2 <br />"; 
    } 

    // overriding A2 
} 

$instance = new B(); 
$instance->A1(); 
이것의

출력은 다음과 같습니다

Class A, method A1 
Class B, method A2 

OP하는 방법 : 원하는 출력은 무엇입니까?

+0

여기 lolka_bolka kojiro의 예제는 코드가 실제로 예상대로 작동하고 내 질문이 유효하지 않음을 보여줍니다. 죄송합니다. 감사합니다. 당신은 많은 도움이되었습니다. – Nir