什么是AOP
百度AOP解释
https://baike.baidu.com/item/AOP/1332219?fr=aladdin
说人话
我看了https://www.laravelcode.cn/posts/110/hyperf-initial-experience-aop-aspect
摘取里面一段话觉得说的很好
什么是 AOP
再说 AOP 之前,肯定都知道 OOP 是什么,面向对象编程。那么 AOP 就是 面向切面编程,
通过预编译方式或运行期动态代理等技术实现程序功能的统一维护的一种技术。
OOP 是针对业务处理过程的实体及其属性和行为进行抽象和封装,以获得更加清晰高效的逻辑单元划分
AOP 则是针对业务处理过程中的切面进行提取,它所面对的是处理过程的某个步骤或某个阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果
我个人理解为就是以前所谓的钩子
PHP AOP-- 注解
注解在PHP本身其实就是注释,本身并无任何意思,都是给人看的。
为了实现注解,只能让机器也能看懂这个注释,从而达到我预期的效果。
目前 AOP 实现方式我个人总结有两种
-
以 PHP Parser 为首的 AST(抽象语法树) 词法语法解析扩展来实现
-
使用反射类中的ReflectionClass的getDocComment,然后再结合反射来做
-
AST
-
php 代码解析阶段会把代码分词,然后使用AST进行语法分析,转成opcode, 再由zend引擎依次执行拆分好的opcode。所以我们可以在这个阶段作为切入点,在分词后,语法解析也把这段“特殊意义的注释”也让他一起解析,成熟的轮子目前比较出名的就是 PHP-Parser 作为一个php扩展引入后就可以愉快地与AOP玩游戏了
-
反射
通过反射类,读区文件中的注释, 我们定义一些特殊注释 比如 #@# 这个就为注解,在这个特殊符号后的字符串为注解类,然后就可以进行一系列操作,比如,这个注解类在正常类跑完才跑注解类的handle方法
突然想起了账号,距离上次发文都快两年了。
太久没写了,由哪里写的不对希望各位大佬及时指出
网友评论