php依赖注入参数

时间:2018-01-11 23:30:22

标签: php dependency-injection

您好我在下面的脚本中使用了php依赖注入。当注入的对象或类没有构造函数时,一切正常。但是这里的问题是当注入的类与参数一起获得构造函数时,注入失败。我想知道如何处理这种情况。

require 'vendor/autoload.php';


class useMe {

   private $param ;

   function __construct($param) {

      $this->param = $param ;
   }

   public function go() {

      return "See you later on other class with my parameter " .  $this->param;
   }
 }  // end of useMe Class



 class needInjection {
    private $objects ;

    public function __construct(useMe $objects) {
      $this->objects = $objects ;
    }

    public function apple() {
      return $this->objects->go();
    }
 }  // end of needInjection

 /**  Implementing now injection  **/ 
  $container = DI\ContainerBuilder::buildDevContainer();

  // adding needInjection class dependency 
 $needInjection = $container->get('needInjection');
 echo $needInjection->apple() ;   // this fails due to parameter passed to the constructor function  of useMe class

注意:为了便于理解,此示例已经过简化

1 个答案:

答案 0 :(得分:0)

您需要添加一个定义,以便PHP-DI知道如何构造您的useMe对象(在php 5.6下测试):

$builder = new \DI\ContainerBuilder();
$builder->addDefinitions([
    'useMe' => function () {
        return new useMe('value_of_param');
    },
]);
$container = $builder->build();

这在PHP-DI手册的PHP定义部分http://php-di.org/doc/php-definitions.html

中有解释

您可能需要更改的其他一些事项:

  1. 使用.代替+来连接字符串:return "See you later on other class with my parameter " . $this->param;

  2. 需要使用return方法中的apple()内容:return $this->objects->go();