当我遇到这段代码时,我正在阅读一篇博文:
<?php
include_once 'config.php';
class User
{
//Database connect
public function __construct()
{
$db = new DB_Class();
}
Run Code Online (Sandbox Code Playgroud)
在评论中有人发布了以下内容:
永远不要在构造函数中初始化db连接
但与所有评论战士一样,他们从来没有给出理由?为什么这是错误的或不好的做法?
在构造函数中工作,例如:创建/初始化协作者,与其他服务进行通信以及设置自己状态的逻辑,可以删除测试所需的接口,从而强制子类/模拟继承不需要的行为.构造函数中的太多工作会阻止实例化或更改测试中的协作者.
相反,使用依赖注入并将任何协作者传递给构造函数.这将创建更容易测试的代码.当你new在ctor中的某些东西时,使用Test Double模拟/存储它会困难得多.
此外,通过注入协作者,您可以更轻松地更换具有不同实现的协作者,从而减少耦合,促进代码重用和编码,而不是具体实现.