最佳实践,重写__construct() 与提供 init() 方法
当您对对象进行子类化并希望扩展初始化代码时,有两种方法。重写__construct(),并实现超类构造函数调用的初始化方法。
方法 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 Framework的文档似乎不鼓励重写构造函数,并希望您在提供的地方重写init方法,但这对我来说有点不对劲。Zend也倾向于做一些我不满意的事情,所以我不确定它是否应该被用作最佳实践的一个例子。我个人认为第一种方法是正确的,但我经常看到第二种方法,以至于想知道这是否真的是我应该做的。
你对覆盖__construct有什么意见吗?我知道你必须小心记住调用超类构造函数,但大多数程序员应该意识到这一点。
编辑:我没有使用Zend,我只是将其用作代码库的一个示例,鼓励您使用init()而不是覆盖__construct()。