我正在尝试使用动态参数创建一个新的类实例,例如:
$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
答案 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);