2010-03-09 12 views
58

¿Cómo podría llamar al constructor de una clase con call_user_func_arrayCómo llamar al constructor con call_user_func_array en PHP

No es posible hacer:

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

porque si el constructor tiene parámetros, el El nuevo fallará.

Restricción: No controlo las clases que tengo que crear instancias, ni puedo modificarlas.

No me preguntes por qué quiero hacer esta locura, esta es una prueba loca.

+0

ver varias soluciones aquí: http://stackoverflow.com/questions/1929108/is-there-a-call-user-func-equivalent-to-create-a-new -class-instance – Gordon

Respuesta

127

Se puede utilizar como reflection:

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

A partir de PHP 5.6.0, la ... operator también se puede utilizar para este propósito.

$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

Esta ... la sintaxis es tan dominante: D –

+1

Esos tres puntos salvan mi día ... Gracias – MujtabaFR

Cuestiones relacionadas