use call_user_func instead of use reflect api