在框架中,第三方开发类A。
类A的初始化,采用框架提供的工厂模式Factory进行初始化。即提供类名的给Factory的instance方法,返回一个实例化的对象,而不是直接new。
在工厂instance中,将类名A传给类AOP的初始化方法,实例化类AOP。然后用AOP的实例,调用A的方法。因为A的方法并不存在于AOP中,所以会执行AOP的__call方法。
由于A在AOP的__construct中,将类名A传给AOP的__call,并在__call中利用method_exists判断A及其调用的方法是否存在。如果存在,就可以在这个方法的前后调用一些固定的方法,实现权限、日志、监控、debug等AOP功能,并用call_user_func_array实现该方法。
对于需要进行权限管理的类和方法,是要记录到数据库中的,所以还要把它们写到配置文件中。安装插件的时候,直接从配置文件中读取需要管理的类和方法。
采用这种方式,甚至只需要配置,就可以把类的方法执行了。但是大部分的PHP编辑器并不支持各类框架,所以为了方便编辑,有些框架还配了编辑器、IDE。
星期日, 03/08/2020 - 08:54 — 杨超