我想这可能是一个愚蠢的问题,但我无法将其包裹起来。
所以我有一些看起来像这样的代码:
$process = new ProcessTree();
$process->start();
并且类processTree是:
class ProcessTree()
{
public function __construct()
{} //dummy constructor...
}
public function start()
{
$this->init();
$this->doThis();
$this->doThat();
//etc...
}
所以我想我的问题是关于虚拟构造函数。根据好的设计,构造函数应该不做什么?或者,start()
的身体不应该在__construct()
内吗?
答案 0 :(得分:1)
一般来说,构造函数不应该“太多”,因为这会违反单一责任原则:构造函数的责任是准备对象以供使用,因此它的操作应限于。
当然,各种规则都会有例外。例如,PDO
的构造函数初始化数据库连接,而实际上并不需要这样做。但是在PDO
的背景下,这是有道理的,因为:
但是根据经验,只要有疑问,就不要在构造函数中做事。
答案 1 :(得分:1)
如果你真的不需要,你不需要使用构造函数。我认为将空构造函数放在最佳实践中是不行的。
您也不应该将代码从start()
移动到构造函数。构造函数应该只帮助初始化对象(例如设置一些属性),如果你想做一些操作,你应该简单地运行这些方法或创建包装器方法(就像你一样)一次运行多个方法。
当然,我们不知道您在init()
,doThis()
和doThat()
方法中做了什么。如果他们采取的行动总是需要使用其他对象的方法,您可以将它们移动到构造函数中,但正如我所说,我们不知道它们中的代码是什么。