带参数的php依赖注入

带参数的php依赖注入,php,dependency-injection,Php,Dependency Injection,您好,我在下面的脚本中使用php依赖项注入。当注入的对象或类没有构造函数时,一切都可以工作。但这里的问题是,当注入的类获得一个构造函数和参数时,注入失败。我想知道如何处理这种情况 require 'vendor/autoload.php'; class useMe { private $param ; function __construct($param) { $this->param = $param ; } public functio

您好,我在下面的脚本中使用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

注意:为了便于理解,这个例子已经简化了

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

PHP-DI手册中关于PHP定义的部分对此进行了解释:

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

  • 使用
    而不是
    +
    连接字符串:
    返回“再见”
    稍后,使用“我的参数”创建另一个类$这个->参数

  • 需要从
    apple()
    method:
    return中返回
    something
    $this->objects->go()


  • useMe
    类中的
    $aparam
    是什么?应该是
    $this->param=$param(分号前也没有空格)我强烈建议不要根据评论编辑带有更正的初始帖子。。。这可能会让其他人误入歧途——特别是如果你仍然有问题的话,这个答案的hanks@astrangeloop现在就可以了……所以我宣布这个问题已经解决
    
    $builder = new \DI\ContainerBuilder();
    $builder->addDefinitions([
        'useMe' => function () {
            return new useMe('value_of_param');
        },
    ]);
    $container = $builder->build();