如何使用“函数处理”样式函数实例化一个类?

时间:2011-01-30 02:32:14

标签: php reflection instantiation

我正在尝试实现命令模式样式队列,我不知道如何将参数传递给对象的构造函数。

我的'命令'模式将对象存储在数据库中,其中我有一个表queue_items存储我的'Command'对象,其中包含字段classmethod,{{1 (存储为索引数组),constructor_arguments(存储为索引数组)和method_argumentsobject_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。

2 个答案:

答案 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()

?>