Php 基类中的依赖项注入设置器,其类要求依赖项作为扩展
如果我使用setter进行依赖项注入,并且许多类都需要相同的依赖项,那么我是否应该让所有这些类使用setter来扩展基类中的依赖项 例如: 假设我有三个类:Page、Article、Comment,它们都依赖于$db和$user 具有基类依赖关系的优点或缺点是什么,如:Php 基类中的依赖项注入设置器,其类要求依赖项作为扩展,php,dependency-injection,Php,Dependency Injection,如果我使用setter进行依赖项注入,并且许多类都需要相同的依赖项,那么我是否应该让所有这些类使用setter来扩展基类中的依赖项 例如: 假设我有三个类:Page、Article、Comment,它们都依赖于$db和$user 具有基类依赖关系的优点或缺点是什么,如: class Dependencies { private $database; private $user; final public function setDa
class Dependencies
{
private $database;
private $user;
final public function setDatabase($dbh)
{
$this->database = $dbh;
}
final public function setUser($user)
{
$this->user = $user;
}
}
然后将其他类作为依赖项的扩展
class Article extends Dependencies
{
public function __construct()
{
// some code
}
// some other functions that use $this->database and $this->user
}
而不是让setDatabase和setUser存在于每个单独的类(文章、页面和注释)中
谢谢。拥有一个名为Dependencies的类是个坏消息。文章不是依赖项的子类型 这是特征更合适的地方
trait DatabaseOwner
{
private $database;
final public function setDatabase($dbh)
{
$this->database = $dbh;
}
}
class Article
{
use DatabaseOwner;
}
如果你发现自己经常同时使用同一组特征,你可以创建由多个特征组成的特征
然而,所有这些都说明了:如果这三个类都来自于一个更好命名的类,该类表示is-a关系,并且它实现了这些函数(或者使用了traits),因为它是基类型的固有特性,那么这是完全可以接受的
但在我看来,仅仅因为事物恰好共享某些属性而创建一个整体基类是不好的。适当地使用traits无疑是不好的,但值得一提的是,它们只在php5.4以后才可用