Aop绑定

主要依赖 * @Aop*()注解元实现,主要作用是实现AOP切面注入行为。该注解元主要参数有2个:

  • class:类文件的命名空间地址
  • function:指定接收的class类对应的方法,该参数为空的时候默认为【run】。

Aop主要支持以下4个注解元:

AopBefore 前置
AopAfter 后置
AopAround 环绕
AopThrows 异常处理

具体使用案例如下:

<?php
namespace app\controller;
use x\Controller;

class Index extends Controller
{
    /**
     * 注意:同一类的Aop操作,只会生效一个
     * @AopBefore(class="app\aop\Demo", function="before")
     * @AopAfter(class="app\aop\Demo", function="after")
     * @AopAround(class="app\aop\Demo", function="around")
     * @AopThrows(class="app\aop\Demo", function="throws")
    */
    public function index() {
        return $this->fetch('AOP注入测试');
    }

}

同时我们需要注意,对应的function都应该接收两种AOP定义的不同属性,例如上面实例中所提到的app\aop\Demo类:

<?php
namespace app\aop;

class Demo
{
    //aop 除了异常通知,其余AOP事件都需要return true程序才会向下执行,否则会抛出异常
    //aop 都需要接收以下参数格式

    // 前置
    public function before() {
        return true;
    }
    // 后置
    public function after() {
        return true;
    }
    // 环绕
    public function around() {
        return true;
    }
    // 异常通知
    public function throws($error) {

    }

}

SW-X建议:所有的AOP类都应该统一存放在/app/aop/目录下,当然这不是强制的。

注意:同一类的Aop操作,只会生效一个。例如,同时标注两个AopBefore,只有最后一个会生效。