qrokodial
qrokodial

Reputation: 45

Instantiating a class with an array as parameters

I'm aware of the existence of call_user_func_array, but I don't believe you can use this to construct a class (if you can, how do you do it?). As long as I'm not mistaken, how do you instantiate a class with an array as parameters?

for example:

class Test {
    public function __construct($var1, $var2) {
        // do something
    }
}

how would I instantiate it with this: array("var1_data", "var2_data")

Upvotes: 0

Views: 253

Answers (2)

Jason Burbage
Jason Burbage

Reputation: 133

If you must have multiple constructors, you should name them something other than __construct, then define a __construct method that can accept any number of arguments. Within that method, you can determine which of your custom constructors to use. If all you want to do is allow the constructor to be passed an array instead of a list of arguments, you can do it this way (note that this example lacks any error checking):

public function __construct() {
    $args = func_get_args();
    if(count($args) == 1 && is_array($args[0])) {
        $cArgs = $args[0];
    } else {
        $cArgs = $args;
    }

    __do_construct($cArgs[0], $cArgs[1]);

}

private function __do_construct($arg1, $arg2) {
    // do something
}

Upvotes: 0

Elnur Abdurrakhimov
Elnur Abdurrakhimov

Reputation: 44851

class Test {
    public function __construct(array $params) {
        // ...
    }
}

Don't use “magic” unless you really need it.

EDIT:

If what you need is varagrs, you can find an answer here.

Upvotes: 1

Related Questions