2011-02-24 2 views
14

위의 클래스에서 확장 한 다른 클래스는 다음과 같습니다.

class aSubClass extends baseTestMain 
{ 
    public function doingSomething() 
    { 
     parent::testFunction(); 
     //someextrastuffhere 
    } 
} 

일반적으로, 하위 클래스에서 새 메서드를 정의 할 때 부모 메서드를 호출하려고 할 때 parent::methodnamehere() 대신 parent::methodnamehere() 위의 작업을 수행하지만 $this->methodname() 대신 $this->methodname()도 사용할 수 있으며 작업은 동일합니다.

class aSubClass extends baseTestMain 
{ 
    public function doingSomething() 
    { 
     $this->testFunction(); 
     //someextrastuffhere 
    } 
} 

그래서 내가 묻는 것은 parent::testFunction();를 사용해야합니까, 아니면 $this->testFunction();을 사용해야합니까? 또는 내가 놓친 부분에 차이가 있습니까? 그렇지 않다면 선호도 또는 선호하는 방법은 무엇입니까?

하위 클래스에서이 함수를 재정의하거나 확장하지 않고 있습니다. 기본적으로 구현은 부모로부터 이월됩니다.

답변

26

귀하의 경우 aSubClass::testFunction()baseTestMain::testFunction()에서 상속되므로 $this->testFunction()을 사용하십시오. 해당 구현 내에서 하위 클래스의 해당 메서드를 재정의하려면 parent::testFunction() 만 사용해야합니다.

의 차이는 자녀가 부모에서 상속하는 대신 자신의 구현이있는 경우 $this->이 아이의 구현 호출 동안 parent:: 부모의 구현을 호출하는 것입니다.

+0

"서브 클래스에서 그 함수를 오버라이드하거나 확장하지 않고 있습니다. 기본적으로 구현은 부모로부터 이월됩니다." –

+0

@Ignacio Vazquez-Abrams : 감사합니다. 질문에 답하는 맨 위에 다른 단락을 추가했습니다. 내 사례가 관련성이없는 것 같아서 폐지 했어. – BoltClock

+1

@Asphere, 가독성과 개념을 고려하면 가장 좋은 답변입니다. –

5

부모에 대한 메서드를 호출하면 메서드의 재정의가 호출되지 않으므로 클래스의 자식이 다형성에 올바르게 참여할 수 없습니다.

관련 문제