0

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

$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

4

2 回答 2

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);

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

于 2013-04-08T23:27:38.477 回答
1
$reflect  = new ReflectionClass($class);
$instance = $reflect->newInstanceArgs($args);

来源

于 2013-04-08T23:59:29.033 回答