根据名称字符串和参数数组创建 class 的实例
Create instance of class based on string for name and array for parameters
标题写的很露骨,我还是举个例子吧:
class Foo
{
public function __construct($param1, $param2) {
echo 'Class name: ' . __CLASS__ . "\n" .
'param1 = ' . $param1 . "\n" .
'param2 = ' . $param2;
}
}
$class_name = 'Foo';
$params =
[
'content1',
'content2'
];
有了这段代码,我如何使用 $params
.
中的参数创建 Foo
的实例
我知道我能做到
$class = new $class_name($params);
但这会将参数作为一个数组传递,我希望它能 展开 参数。以下是我想要的行为:
$class = new $class_name($param[0], $param[1]);
谢谢!
如果你有 5.6:
$instance = new $class(...$args);
如果不使用反射:
$reflect = new ReflectionClass($class);
$instance = $reflect->newInstanceArgs($args);
我对 post 犹豫不决,因为实际上您应该设计为接受参数数组或单个参数。但是,这里有 hackish 方法:
使用另一个函数:
public function init($params) {
echo 'Class name: ' . __CLASS__ . "\n" .
'param1 = ' . $params[0] . "\n" .
'param2 = ' . $params[1];
}
public function __construct($param1, $param2=null) {
if(!is_array($param1)) {
$param1 = func_get_args();
}
call_user_func_array(array($this, 'init'), $param1);
}
在 __construct
中完成所有操作:
public function __construct($param1, $param2=null) {
if(!is_array($param1)) {
$param1 = func_get_args();
}
echo 'Class name: ' . __CLASS__ . "\n" .
'param1 = ' . $param1[0] . "\n" .
'param2 = ' . $param1[1];
}
标题写的很露骨,我还是举个例子吧:
class Foo
{
public function __construct($param1, $param2) {
echo 'Class name: ' . __CLASS__ . "\n" .
'param1 = ' . $param1 . "\n" .
'param2 = ' . $param2;
}
}
$class_name = 'Foo';
$params =
[
'content1',
'content2'
];
有了这段代码,我如何使用 $params
.
Foo
的实例
我知道我能做到
$class = new $class_name($params);
但这会将参数作为一个数组传递,我希望它能 展开 参数。以下是我想要的行为:
$class = new $class_name($param[0], $param[1]);
谢谢!
如果你有 5.6:
$instance = new $class(...$args);
如果不使用反射:
$reflect = new ReflectionClass($class);
$instance = $reflect->newInstanceArgs($args);
我对 post 犹豫不决,因为实际上您应该设计为接受参数数组或单个参数。但是,这里有 hackish 方法:
使用另一个函数:
public function init($params) {
echo 'Class name: ' . __CLASS__ . "\n" .
'param1 = ' . $params[0] . "\n" .
'param2 = ' . $params[1];
}
public function __construct($param1, $param2=null) {
if(!is_array($param1)) {
$param1 = func_get_args();
}
call_user_func_array(array($this, 'init'), $param1);
}
在 __construct
中完成所有操作:
public function __construct($param1, $param2=null) {
if(!is_array($param1)) {
$param1 = func_get_args();
}
echo 'Class name: ' . __CLASS__ . "\n" .
'param1 = ' . $param1[0] . "\n" .
'param2 = ' . $param1[1];
}