我为依赖项创建了一个简单的类,以便不创建多个实例:
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);
答案 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();
功能的内容。