我正在尝试实现命令模式样式队列,我不知道如何将参数传递给对象的构造函数。
我的'命令'模式将对象存储在数据库中,其中我有一个表queue_items
存储我的'Command'对象,其中包含字段class
,method
,{{1 (存储为索引数组),constructor_arguments
(存储为索引数组)和method_arguments
(object_type
)。
如果enum{'instance','static}
是'instance',我使用'new'关键字实例化对象。如果object_type
是“静态”,那么我只需使用object_type
拨打电话。
如果我没有构造函数参数,我可以使用这样的东西:
forward_static_call_array()
但是如果我希望将$instance = new $class_name(); //NOTE: no arguments in the constructor
$result = call_user_func_array(array($instance, $method_name), $method_arguments);
中的值传递给constructor_arguments
,我找不到让我这样做的功能。
我希望保留索引数组,而不是依赖于专门的构造函数,这样我就不必重写我自己用来处理的第三方类,例如,将一个关联数组作为一个唯一的参数。构造
是否有人知道如何以__construct()
的方式将索引数组直接传递到__construct
?或者它根本就没有完成?
Drew J. Sonne。
答案 0 :(得分:2)
对于这种特殊情况,您可以使用ReflectionClass
:
$rc = new ReflectionClass($className);
$instance = $rc->newInstanceArgs($array_of_parameters);
答案 1 :(得分:1)
使用ReflectionClass的更详细的例子:
<?php
class MyClass
{
private $arg1;
private $arg2;
public function __construct($arg1, $arg2 = "Hello World")
{
$this->arg1 = $arg1;
$this->arg2 = $arg2;
}
public function print(){
echo $this->arg2 . "," .$this->arg2;
}
}
$class = new ReflectionClass('MyClass');
$args = array(3,"outro");
$instance = $class->newInstanceArgs($args);
$instance->print()
?>