经常的需求是,由其他地方获取到一个类的名称,需要生成该类的对象。
直接使用这样的语法是肯定行不通的:

$classname='Test';
$obj = new $classname();

可以给目标类定义一个static的方法生成该对象的实例,然后通过call_user_func或call_user_func_array调用该方法。当然,也可以通过工厂类等方法来实现。

class Test{
var $val;
function __construct(){
$this->val = 'test';
}
static function create(){
static $instance ;
if (!$instance){
$instance = new Test();
}
return $instance;
}
}
$className = 'Test';
$obj = call_user_func(array($className, 'create'));
var_dump($obj);

Leave a Reply