AOP VS OOP
AOP(Abstract Oriented Programming),面向切面编程。AOP是OOP的补充和完善,OOP通过封装继承多态建立一种从上到下的系统层次,但对于与系统业务逻辑无关,每一层次都涉及的功能却无能为力,例如日志。这种分散到各处的被称为横切cross-cutting。
AOP基本概念
切面(Aspect):
一个关注点的模块化,这个关注点横切多个对象。例如logging,caching,transaction
连接点(Joinpoint):
程序执行过程中明确的点,如方法的调用,特定的异常被抛出或属性的获取。
通知(Advice):
切面在特定连接点采取的行动。
切入点(Pointcut):
指定一个通知将被引发的一系列连接点的集合
。
引入(Introduction):
添加方法或字段到被通知的类。
织入(Weaving):
组装切面来创建一个被通知对象。这可以在编译时或加载时完成,也可以在运行时完成。
伪AOP
PHP魔术方法实现伪PHP。
代码执行未定义的方法时会调用__call方法,通过重定义__callf方法以实现AOP。
- 父类log包含call方法
- 子类user继承父类并定义_show方法
- 调用子类show方法
- 无法找到执行从父类继承的call方法,加载子类的_show方法。
class log {
function __call($method,$args) {
$method = "_$method";
echo 'log begins...<br>';