AFAIK dynamic calls like this are faster than call_user_func