當您繼承對象並想擴展初始化代碼時,有兩種方法。重寫__construct(),並實現一個你的超類構造函數調用的初始化方法。最佳實踐,覆蓋__construct()與提供init()方法
方法1:
class foo
{
public function __construct ($arg1, $arg2, $arg3)
{
// Do initialization
}
}
class bar extends foo
{
public function __construct ($arg1, $arg2, $arg3)
{
parent::__construct ($arg1, $arg2, $arg3);
// Do subclass initialization
}
}
方法2
class foo
{
public function init()
{
// Dummy function
}
public function __construct ($arg1, $arg2, $arg3)
{
// Do subclass defined initialization
$this -> init();
// Do other initialization
}
}
class bar extends foo
{
public function init()
{
// Do subclass initialization
}
}
爲Zend框架的文件似乎阻止重載構造函數,並希望您覆蓋的init方法,若設置,但是這在某種程度上只是沒有按」對我感覺不錯。 Zend也傾向於做一些我不喜歡的事情,所以我不確定它是否應該被用作最佳實踐的例子。我個人認爲第一種方法是正確的,但我經常看到第二種方法足以讓人懷疑這是否應該是我應該做的。
您對覆蓋__construct有任何意見嗎?我知道你必須小心地記得調用超類的構造函數,但大多數程序員應該知道這一點。
編輯:我不使用Zend ,我只使用它作爲鼓勵您使用的init(),而不是壓倒一切的__construct()代碼庫的一個例子。
對不起,我應該在我的問題上更清楚一點。我沒有使用Zend,如果我覺得它可能有用,我正在編寫我計劃在將來某個時候向公衆發佈的代碼。我只是使用Zend作爲例子,因爲它傾向於使用init方法,並且如果一個主要框架正在這樣做,那麼肯定有一個原因。 (即使我個人不喜歡這個問題的框架太多) – GordonM
啊對了。可能值得編輯,並把它放在你的問題中。我通過回答編輯。 –