2012-10-06 53 views

回答

0

ReflectionClass是要做到這一點,最直接的方式做到這一點的最好辦法,但有另一種方式:

function call_new_array($klass, $args) 
{ 
    $vars = array(); 
    $loads = array(); 
    foreach($args as $i => $x) { 
    $vars[] = '$v' . $i; 
    $loads[] = '$v' . $i . ' = $args[' . $i . ']'; 
    } 
    return eval(implode(";",$loads) . 
       ";return new $klass(" . implode(",", $vars) . ");"); 
} 
0

call_user_func_array(),因爲(作爲命名建議),它調用函數/方法,但不打算創建對象,使用ReflectionClass

$refClass = new ReflectionClass($class); 
$object = $refClass->newInstanceArgs($args); 

另一個(更多d基於ESIGN - )解決方案是一個靜態的工廠方法

class Demo() { 
    public static function set_args ($args) { 
    return new self($args[0],$args[1],$args[2]); 
    } 
} 

,然後就

$object = $class::set_args($args); 

它的清潔劑,因爲較少的魔術和更多的控制

相關問題