依赖注入。这是正确的吗?

时间:2013-12-04 18:55:32

标签: php dependency-injection

试图验证对类的OOP依赖性的理解的另一个问题。

虽然我非常了解PHP 4. *,但我最近才重新开始编程,因此开始使用OOP,所以请保持温和;)

课程应尽可能独立,我理解。所以,当我有一个从数据库获取信息的类机构时,我必须向该机构注入一个数据库类的实例,对吧?:

$dbh = new database();
$a = new institute();

$a->SetDBI($dbh);

在数据库中,我有一个方法从数据库中提取一条记录,并提供表格表,ID列和要提取的记录的实际ID。

现在,我想在研究所想要一个获得一个研究所的方法。对我来说,然后使用数据库类方法getone()

是有意义的
public function GetInstitute()
{
    $record = $this->dbi->GetOneRecord('table', 'column', $this->id);
}

这是正确的方式吗?我觉得我仍然以这种方式在类之间建立依赖关系?

问题是:我是否构建了不应该在这里的依赖项?或者在标准做法中使用另一个类中某个类的方法,如示例所示?

1 个答案:

答案 0 :(得分:1)

这是对的。您仍然在类之间存在一些依赖关系,但仅限于某种程度。实际上(由于PHP的弱类型),您可以传递任何类,只要它正确实现GetOneRecord方法,它就会起作用。

为了使它更严格一些,您可以使用基类或接口并向setDBI方法添加类型提示,但除此之外,这是可行的方法。

但是对于实施细节,我不太确定。我看到你将表名和列名传递给数据库对象。那是不对的。您不希望您的机构知道它的保存方式和位置。我宁愿看到你传递了一个实现LoadInstitution($id)方法的对象。但我觉得很难给你一个坚实的例子,因为我不清楚GetInstitute最初应该做些什么。