How to call the constructor with call_user_func_array in PHP
Asked Answered
A

1

70

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.

Alcoholism answered 9/3, 2010 at 13:18 Comment(1)
See various solutions here: #1929608Puffin
T
158

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);
}
Tremolite answered 9/3, 2010 at 13:26 Comment(1)
This will fail lower than 5.6.0 with following error: Parse error: syntax error, unexpected '.'Modiolus

© 2022 - 2024 — McMap. All rights reserved.