美文网首页
php简单实现AOP 动态代理

php简单实现AOP 动态代理

作者: 天上掉下的胖纸 | 来源:发表于2020-05-02 09:46 被阅读0次

首先说一下自己理解的依赖注入,控制反转,AOP

如果不准确的欢迎吐槽啦

  • 依赖注入 : 操作类实现一个专有接口 ,然后根据实际情况调用接口,如发送短信,发送邮件,本身都是发送,直接实现send方法,调用,我不用管里面是什么逻辑,我只要用send就可以了
  • 控制反转 : 本来依赖注入的方法需要你自己实例化根据类型调用,现在我配置好,交给系统自动实例化调用的过程,叫控制反转
  • AOP: 主要是为了分离关注点,比如,记录日志, 在场景用户各种的操作都需要日志,在专门的节点里面实现这个功能就可以了

简单代码实现AOP动态代理原理

<?php
/**
 * aop基本概念,动态代理
 */
class LogicProxy
{
    private $obj;

    /**
     * LogicProxy constructor.
     * @param string $class
     * @throws Exception
     */
    public function __construct(string $class)
    {
        if (!class_exists($class)) {
            throw new \Exception("{$class} 类不存在啦");
        }
        $this->obj = new $class();
    }

    /**
     * @param $name
     * @param $arguments
     * @throws ReflectionException
     * @throws \Exception
     */
    public function __call($name, $arguments)
    {
        $reflect = new ReflectionClass($this->obj);
        $method = $reflect->getMethod($name);
        if (!$method) {
            throw new \Exception("{$name} 方法名不存在");
        }
        if (!$method->isPublic() || $method->isAbstract()) {
            throw new \Exception("{$name} 方法不能执行");
        }
        echo "before 执行了" . PHP_EOL;
        $method->invoke($this->obj, ...$arguments);
        echo "after 执行了" . PHP_EOL;
    }
}

class Login
{
    public function save($message)
    {
        echo "日志 : {$message}" . PHP_EOL;
    }
}

 //测试方法
try {
    /** @var Login $logicProxy */
    $logicProxy = new LogicProxy(Login::class);
    $logicProxy->save("我只是想写个日志而已");
} catch (\Exception $e) {
    echo "ERROR : {$e->getMessage()}" . PHP_EOL;
}

相关文章

  • php简单实现AOP 动态代理

    首先说一下自己理解的依赖注入,控制反转,AOP 如果不准确的欢迎吐槽啦 依赖注入 : 操作类实现一个专有接口 ,然...

  • 实现一个简单的基于动态代理的 AOP

    实现一个简单的基于动态代理的 AOP Intro 上次看基于动态代理的 AOP 框架实现,立了一个 Flag, 自...

  • Spring AOP实现

    使用SpringBoot实现AOP动态代理 1 使用CGLIB实现AOP动态代理 .properties .xml

  • Spring AOP 实现原理

    Spring AOP 实现原理 静态代理 众所周知 Spring 的 AOP 是基于动态代理实现的,谈到动态代理就...

  • 2018-09-16

    AOP的XML配置: AOP的先关术语: Spring底层的AOP实现原理 动态代理: JDK动态代理:只能对实现...

  • 细说Spring——AOP详解(使用CGLIB实现AOP)

    一、动态代理实现AOP的缺陷 在上一篇文章细说Spring——AOP详解(动态代理实现AOP)中讲解了如何使用动态...

  • php魔法函数

    php魔法函数性能不佳,尽量避免使用php魔法函数:(主要用在:动态代理、实现准AOP) 1. __constru...

  • springboot aop

    springboot怎样使用aop呢?我们知道aop的实现一种是jdk动态代理实现aop,一种是cglib动态代理...

  • 3.3AOP简介-第3章aop面向切面编程

    AOP:面向切面编程,底层采用动态代理实现的,采用了两种代理:jdk的动态代理与CGLIB的动态代理。AOP是动态...

  • Spring AOP内部调用失效问题

    Spring AOP基本原理 Spring AOP是基于动态代理机制实现的,通过动态代理机制生成目标对象的代理对象...

网友评论

      本文标题:php简单实现AOP 动态代理

      本文链接:https://www.haomeiwen.com/subject/clnhghtx.html