views:

44

answers:

3

Hi,

If I am overloading the __call method in a PHP class, how could I call the actual method if my code doesn't do something else? For example:

public function __call($name, $arguments)
{
    if($name == 'tom')
    {
        $this->doName($name);
    }
    else
    {
        // Something here to carry on the __call maybe:
        // $this->$name($arguments);
    }
}

The issue is that the $arguments are passed through as an array, how could I continue to pass them through info $this->$name($arg, $arg, $arg ...) is there a right way to do this?

Thanks! Tom

+3  A: 

You can call:

return parent::__call($name, $arguments);

Or am I misunderstanding what you're asking?

Edit:

And if you mean you want to call $this->$name() to try to trigger parent::__call(), it won't work. You'll wind up in an infinite loop until the stack overflows and php crashes (in other words, it's bad)...

ircmaxell
Heh! Totally never thought of that! :D
tarnfeld
+1  A: 

http://php.net/manual/en/function.call-user-func-array.php is what you are looking for.

Benjamin Cremer
A: 

You can use this:

call_user_func_array("self::method", $parameters)
Sebastian Hoitz