如何初始化具有未知参数的对象?

时间:2011-01-16 23:26:16

标签: php oop class-design

我正在尝试创建一个使用PHP的__call()魔术方法调用方法的类。这个神奇的方法将初始化另一个对象,如下所示:

public function  __call($function, $arguments) {

    /* Only allow function beginning with 'add' */
    if ( ! preg_match('/^add/', $function) ) {
        trigger_error('Call to undefined method ' . __CLASS__ . '::' . $function, E_USER_ERROR);
    }

    $class = 'NamodgField_' . substr($function, 3); /* Ex: $function = addTextField() => $class = NamodgField_TextField */

    /* This doesn't work! Because $class is not an object yet */
    call_user_func_array( array(new $class, '__construct'), $arguments);
}

该代码的最后一行完全是故障!我只是想弄明白我想做什么。

我希望能够在一个接一个地初始化一个新对象时传递$arguments,这样每个子类都可以定义它的必要参数。

我找到了使用eval()的解决方案,但我真的不喜欢它。

任何想法?

1 个答案:

答案 0 :(得分:3)

$class = new ReflectionClass('a');
$object = $class->newInstanceArgs(array(1, 2, 3));

class a
{
    public function __construct($b, $c, $d)
    {
        var_dump($b, $c, $d);
    }
}
相关问题