use call_user_func_array