实在可以通过利用类的反射来实现,下面是详细的代码:
function wpjam_call_method($object, $method, ...$args){if(!method_exists($object, $method)){return;}$reflection= new ReflectionMethod(get_class($object), $method);$is_public= $reflection->isPublic();if($is_public){$callback= [$object, $method];}else{$callback= $reflection->getClosure($object);}return call_user_func_array($callback, $args);}
大略阐明一下,首先还是大略判断工具该方法是否存在,接着获取工具方法的反射,然后判断一下是不是公共的方法,如果是公共就正常调用,不是则获取该方法的闭包,末了利用回调的办法来调用。
这个函数可以让你调用工具的私有或者受保护方法,建议只在一些很分外的情形下才利用,为了方便大家调用,新版的 WPJAM Basic 也汇合成该函数。