小编Ano*_*ous的帖子

如何构建PHP依赖注入容器

我最近了解到在我的PHP应用程序中使用依赖注入(DI)的优点.但是,我仍然不确定如何为依赖项创建容器,或者我是否应该在我正在构建的在线论坛中使用DI.

以下代码是我根据我从这里学到的例子制作的DI容器的版本.

class ioc {

   var $db;
   var $session;
   var $user_id;

   static function newUser(static::$db, static::$user_id) {
      $user = new User($db, $user_id);
      return $user;
   }

   static function newLogin(static::$db, static::$session) {
      $login = new Login($db, $session);
      return $login;
   }

}

$user = ioc::newUser();
$login = ioc::newLogin();
Run Code Online (Sandbox Code Playgroud)

我有几个问题:

1)我应该在哪里实例化我注入的依赖项,例如$ database,$ session等?它是在容器类之外,还是在容器的构造函数内部.

2)如果我需要在其他类中创建User类的多个实例,该怎么办?我无法注入先前实例化的$ user对象,因为该实例已被使用.但是,在另一个类中创建多个User实例会违反DI规则.例如:

class Users {

    function __construct($db, $user_id) {
        $this->db = $db;
        $this->user_id = $user_id;
    }

    function create_friends_list() {
        $st = $this->$db->prepare("SELECT user_id FROM friends WHERE user_id = $this->user_id");
        $st->execute(); …
Run Code Online (Sandbox Code Playgroud)

php dependency-injection

13
推荐指数
2
解决办法
6304
查看次数

标签 统计

dependency-injection ×1

php ×1