Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to call the constructor with call_user_func_array in PHP

How could I call the constructor of a class with call_user_func_array

It is not possible to do :

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

because if the constructor has parameters, the new will fail.

Constraint : I do not control the classes that I have to instantiate, nor can I modify them.

Don't ask me why I want to do this crazy thing, this is a crazy test.

like image 264
Matthieu Napoli Avatar asked Mar 09 '10 13:03

Matthieu Napoli


1 Answers

You can use reflection like:

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

As of PHP 5.6.0, the ... operator can also be used for this purpose.

$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); } 
like image 180
salathe Avatar answered Sep 27 '22 20:09

salathe