使用动态参数启动类实例?

时间:2013-04-08 23:15:36

标签: php

我正在尝试使用动态参数创建一个新的类实例,例如:

$controller = 'className';
$parameters = array('hello', 'world');
new $controller($parameters);

除了我希望参数自然地传递给类,就像我通过call_user_func_array();调用方法一样,我想避免必须在数组中传递参数。

有效地在构造函数上调用call_user_func_array();时是否可以启动类?或者甚至阻止构造函数的自动运行,以便我可以通过call_user_func_array();以属性作为数组运行它?

我现在的实际代码是:

if(!class_exists($controller)) require('controllers/' . $controller . '.php');
return new $controller();

我可以将一组参数传递给构造函数,如$controller($parameters),但是它们都将在一个数组中,而不是作为单独的参数。

可以在此处查看完整文件来源:https://github.com/pyrokinetic/mfw/blob/master/libraries/load.lib.php

2 个答案:

答案 0 :(得分:1)

试试这个:

// Get your stuff from Router

$class = "Home";
$method = "Welcome";
$params = array(
    'id' => 2,
    'name' => 'John'
);

// Dispatch

$app = new $class();
call_user_func_array(array($app, $method), $params);

这样,当你把它传递给call_user_func_array()时,$ params就是数组,但在实例化的控制器/方法中,你不会将$ params作为一个数组变量,但是你的$ params数组中的每个键都是单独的变量。 这是你需要的吗?

答案 1 :(得分:1)

$reflect  = new ReflectionClass($class);
$instance = $reflect->newInstanceArgs($args);

Source