【问题标题】:Dependency injection in php?php中的依赖注入?
【发布时间】:2014-09-09 05:00:39
【问题描述】:

我目前正在使用 PHP 构建一个小项目,但不使用任何静态方法或全局状态。

我的类的构造函数目前看起来有点像这样,我只是在创建对象实例时注入依赖对象。

class Something {

     public function __construct(Name\Space\Object $object, Other\Name\Space $object2) 
     {
         # Assign properties here
     }
}

在我的应用程序的一个类中,我需要通过调用其方法来创建各种对象的新实例。有点像下面的东西;

class Something {

     public function getNewObject()
     {
         return new Name\Space\Object();
     }

     public function getNewObject2()
     {
         return new Name\Space\ObjectTwo();
     }
}

在遵守依赖注入的标准规则的同时应该这样做吗?

我不确定它还能怎么做,就好像我将对象注入构造函数然后我将只有一个实例,而我的应用程序中可能需要多个实例?

谢谢,

【问题讨论】:

    标签: php oop dependency-injection


    【解决方案1】:

    我相信函数是 PHP 中的第一类对象,所以这应该可以工作:

    <?php
    class MyClass {
      function foo() {
        return 'foo';
      }
    };
    
    class MyOtherClass {
      function __construct($klass) {
          $this->klass = $klass;
      }
    
      function get_instance() {
        return new $this->klass();
      }
    }
    
    $factory = new MyOtherClass(MyClass);
    $obj     = $factory->get_instance();
    ?>
    // <h1> value should equal foo
    <h1><?php echo $obj->foo();?></h1>
    

    编辑:经过测试并且有效。

    【讨论】:

    • 这看起来很酷,将实施一个测试,让你知道我的进展如何。如果可行,这是一个比我更好的解决方案,谢谢。
    • 这个解决方案确实有效,只需将类名传递给构造函数就可以了。您还可以通过破坏 $klass 属性在运行时重新分配类。
    • 谢谢 :) 帮助很大
    猜你喜欢
    • 2010-11-27
    • 1970-01-01
    • 2023-03-28
    • 2017-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多