2011-02-24 36 views
14

不是一個真正的問題,更像是我的一部分,但作爲一個例子好奇,說我有一個PHP類:

class baseTestMain 
{ 
    protected function testFunction() 
    { 
     echo 'baseTestMain says hi'; 
    } 
} 

而且從該類擴展上面的另一個類:

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

常,當我想在子類中定義新方法時調用父方法時,我會執行上述操作 - 但是,您可以使用$this->methodname()而不是parent::,並且操作也是相同的。

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

那麼,我問的是,我應該用parent::testFunction();或使用$this->testFunction();?或者我錯過了它有什麼不同?如果沒有,你的偏好或首選方法是什麼?

請注意,我並不是在子類中重寫或擴展該函數,實質上是從父類繼承實現。

回答

26

對你而言,由於aSubClass::testFunction()繼承自baseTestMain::testFunction(),因此請使用$this->testFunction()。如果您要在其子類中重寫該方法,則應該只使用parent::testFunction()

不同的是,parent::調用父類的實現,而$this->呼籲孩子的實施如果孩子有自己的執行,而不是從父繼承它。

+0

「請注意,我並不是在子類中重寫或擴展該函數,實質上是從父類繼承實現。」 – 2011-02-24 08:16:28

+0

@Ignacio Vazquez-Abrams:謝謝,我在回答問題的頂部添加了另一段。我想我的例子是無關緊要的,所以我放棄了它。 – BoltClock 2011-02-24 08:18:14

+1

@Aesphere,考慮到可讀性和概念,這是最好的答案。 – 2014-06-30 19:40:58

5

在父對象上調用方法可防止類的子對象正確地參與多態,因爲它們的方法重定義永遠不會被調用。