基于名称和参数数组的字符串创建类的实例

时间:2015-03-18 20:32:37

标签: php class oop

标题非常明确,但我想举个例子:

class Foo
{
    public function __construct($param1, $param2) {
        echo 'Class name: ' . __CLASS__ . "\n" .
             'param1 = ' . $param1 . "\n" .
             'param2 = ' . $param2;
    }
}

$class_name = 'Foo';
$params =
    [
    'content1',
    'content2'
    ];

拥有此代码后,如何使用Foo中的参数创建$params的实例。

我知道我能做到

$class = new $class_name($params);

但是这会将参数作为一个数组传递,我希望扩展参数。以下是我想要的行为:

$class = new $class_name($param[0], $param[1]);

谢谢!

2 个答案:

答案 0 :(得分:1)

如果你有5.6:

$instance = new $class(...$args);

如果不使用反射:

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

答案 1 :(得分:0)

我对发布此内容犹豫不决,因为您应该设计为接受一系列参数或单个参数。但是,这里是 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];
}