当您对子对象进行子类化并希望扩展初始化代码时,有两种方法。覆盖__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的文档似乎阻止了覆盖的构造函数,并希望覆盖初始化方法(在这里提供),但是这种方式对我来说并不理想。 Zend也倾向于做一些我不高兴的事情,所以我不知道它是否应该被用作最佳实践的例子。我个人认为第一种方法是正确的,但我已经看到第二种方法通常足以想知道这实际上是我应该做的。
你有任何关于覆盖__construct的意见吗?我知道你必须小心记住调用超类构造函数,但大多数程序员都应该意识到这一点。
编辑:
我不使用Zend,我只是使用它作为代码库的例子,鼓励你使用init()而不是覆盖__construct()。