试图验证对类的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);
}
这是正确的方式吗?我觉得我仍然以这种方式在类之间建立依赖关系?
问题是:我是否构建了不应该在这里的依赖项?或者在标准做法中使用另一个类中某个类的方法,如示例所示?
答案 0 :(得分:1)
这是对的。您仍然在类之间存在一些依赖关系,但仅限于某种程度。实际上(由于PHP的弱类型),您可以传递任何类,只要它正确实现GetOneRecord
方法,它就会起作用。
为了使它更严格一些,您可以使用基类或接口并向setDBI
方法添加类型提示,但除此之外,这是可行的方法。
但是对于实施细节,我不太确定。我看到你将表名和列名传递给数据库对象。那是不对的。您不希望您的机构知道它的保存方式和位置。我宁愿看到你传递了一个实现LoadInstitution($id)
方法的对象。但我觉得很难给你一个坚实的例子,因为我不清楚GetInstitute最初应该做些什么。