PHP:如何将参数传递给依赖项容器

时间:2016-12-24 05:42:50

标签: php

我为依赖项创建了一个简单的类,以便不创建多个实例:

class Container {

    private static $instance = array();

    public function use($class) {

        if (!isset(self::$instance[$class])) {

            self::$instance[$class] = new $class();

        }

        return self::$instance[$class];

    }

}

现在我可以像使用它一样:

$Container = new Container;

$Class = $Container->use('SomeClass');

这相当于:

$Class = new Class;

但是,我如何修改这个Container类,以便我可以将(未知数量的)参数传递给我请求实例的类?就像我必须这样做:

$Class = new Class($param1, $param2);

2 个答案:

答案 0 :(得分:1)

这就是我添加__construct()的意思。构造将在您实例化类时运行,以数组格式获取多个所需的参数。

class Container
{
    private static $instance = [];

    public function useClass($class, $args)
    {
        if (!isset(self::$instance[$class])) {
            self::$instance[$class] = new $class($args);
        }
        return self::$instance[$class];
    }
}

class User
{
    private $name;
    private $age;

    public function __construct($args)
    {
        $this->name = $args['name'];
        $this->age = $args['age'];
    }

}


$Container = new Container;

$args = [
    "name" => 'John',
    "age" => 29
];

$user = $Container->useClass('User', $args);

var_dump($Container);
var_dump($user);

答案 1 :(得分:0)

你这样做是为了自己测试吗?如果情况并非如此并且你不知道,那么PHP中有多个库可以让你完全按照你要求的那样做:依赖注入容器。

作为一个简单的,你可以看看用于PHP的Pimple。一个非常简单的容器。

如果您想继续使用解决方案,则应使用类似func_get_args();功能的内容。