gpt4 book ai didi

带参数的php依赖注入(inject)

转载 作者:行者123 更新时间:2023-12-04 17:46:38 25 4
gpt4 key购买 nike

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

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 对象(在 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
    稍后在其他类上使用我的参数 ". $this->param;

  2. 需要从 apple() 方法返回一些东西:return
    $this->objects->go();

关于带参数的php依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48217445/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com