Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 基类中的依赖项注入设置器,其类要求依赖项作为扩展_Php_Dependency Injection - Fatal编程技术网

Php 基类中的依赖项注入设置器,其类要求依赖项作为扩展

Php 基类中的依赖项注入设置器,其类要求依赖项作为扩展,php,dependency-injection,Php,Dependency Injection,如果我使用setter进行依赖项注入,并且许多类都需要相同的依赖项,那么我是否应该让所有这些类使用setter来扩展基类中的依赖项 例如: 假设我有三个类:Page、Article、Comment,它们都依赖于$db和$user 具有基类依赖关系的优点或缺点是什么,如: class Dependencies { private $database; private $user; final public function setDa

如果我使用setter进行依赖项注入,并且许多类都需要相同的依赖项,那么我是否应该让所有这些类使用setter来扩展基类中的依赖项

例如:

假设我有三个类:Page、Article、Comment,它们都依赖于$db和$user

具有基类依赖关系的优点或缺点是什么,如:

    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以后才可用