2013-06-05 5 views
1

자식 인스턴스에서 재귀 적으로 덮어 쓴 부모 함수를 호출하는 방법은 무엇입니까? 정적 메서드를 사용하지 않기 때문에 parent::method()을 사용할 수 없지만 어떻게 든 달라야합니다. 내 문제에 대한 더 나은 접근 방법이 디자인 패턴을 통해 가능할 것이라고 생각합니다.PHP에서 자식의 덮어 쓴 부모 함수를 호출

class Creature { 
    public function eat() { 
     // feed and digest 
    } 
} 

class Mammal extends Creature { 
    public function eat() { 
     // gather and chew 
    } 
} 

class Human extends Mammal { 
    public function eat() { 
     // have a meal 
    } 
} 

class WesternPerson extends Human { 
    public function eat() { 
     // use knife & fork 
    } 
} 

$me = new WesternPerson(); 
$me->eat(); 

eat()를 호출하면 매우 추상 클래스에 특별한에서 반복적으로 위쪽으로 이동한다이 내 클래스 구조입니다. 가장 간단한 방법은 덮어 쓰기 된 함수 내에서 같은 이름의 부모 함수를 호출 할 수있는 것입니다. 그러나 나는 그것이 덮어 씌워 졌으므로 나는 할 수 없다는 것을 알고있다.

+2

' parent :: method()'는 정적 호출이 아닙니다 (다소 비슷하게 보입니다). 그걸 사용하면 괜찮아. – Wrikken

+1

참고 : http://stackoverflow.com/a/16925581/2153758 – bwoebi

+0

감사합니다. 나는 분명히'::'연산자 때문에 혼란 스러웠다. 나는 지금 분명하다. – quape

답변

4

::는 정적 메서드만을위한 아니다 일하는 것이 호출 의견에 명시된 바와 같이. 범위 분석 연산자입니다. 컨텍스트 범위가 아닌 다른 범위에있는 함수를 활용하려는 경우 언제든지 사용됩니다.

parent, staticself은 호출 범위와 관련된 다른 범위를 참조하는 언어 구문입니다. 이 경우

parent::eat() 

인간을 :: 호출에 따라서

은 WesternPerson에서 식사 : (예 : $이 인간의 WesternPerson 인스턴스를 의미합니다 :: 먹는 상황) 상황을 먹을

관련 문제