Как передать аргументы в неизвестную функцию?
Вызвать функцию, название которой находится в переменной, можно несколькими способами:// Когда аргументы и их количество известно заранее
// Такой вариант мне кажется самым читабельным
// Оборачивать в фигурные скобки не обязательно
// Я это делаю всегда для того, чтобы было видно, что вызов динамический
$this->obj->{$function}($arg1, $arg2)
или// Подходит как раз для описанного случая
// Аргументы могут быть любыми и передаются в виде массива
call_user_func_array([$this->obj, $function], [$arg1, $arg2]);
Не хочу особо занудствовать, но ваша "магия" никак не соотносится с ООП. Обращаясь к вашему объекту вы должны точно знать, что он может делать, а используя такой __call вы изначально подразумеваете, что на самом деле используете другой объект, в котором сейчас метод есть. А потом кто-то его изменит. И вы не узнаете о том, что ваш объект его использовал неявно.
Лучше чётко прописывать все проксируемые методы в своём классе.