2010-03-09 14 views
58

Come potrei chiamare il costruttore di una classe con call_user_func_arrayCome chiamare il costruttore con call_user_func_array in PHP

Non è possibile fare:

$obj = new $class(); 
call_user_func_array(array($obj, '__construct'), $args); 

perché se il costruttore ha parametri, il nuovo avrà esito negativo.

Vincolo: non controllo le classi che devo istanziare, né posso modificarle.

Non chiedermi perché voglio fare questa cosa pazza, questo è un test pazzesco.

+0

Vedi diverse soluzioni qui: http://stackoverflow.com/questions/1929108/is-there-a-call-user-func-equivalent-to-create-a-new -class-instance – Gordon

risposta

127

È possibile utilizzare reflection come:

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

partire da PHP 5.6.0, il ... operator può essere utilizzato anche per questo scopo.

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

if(version_compare(PHP_VERSION, '5.6.0', '>=')){ 
    $instance = new $class(...$args); 
} else { 
    $reflect = new ReflectionClass($class); 
    $instance = $reflect->newInstanceArgs($args); 
} 
+2

Questa sintassi ... è così sopraffatta: D –

+1

Quei tre punti mi hanno salvato la giornata .. Grazie – MujtabaFR

Problemi correlati