PHP AOP 面向切面

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 如果一个程序是一个管道系统,AOP 就是在管道上钻一些孔,在每个孔中注入新的代码流。 AOP 的实施分 3 步:切面分解、切面实现和切面合成。 OOP 只能沿继承树的纵向方向重用,AOP 可以沿横向方向重用。 AOP 面向切面编程 转载地址面向对象关注于每个对象定义的完整性切面是关注于整个对象系统的某个/某些特定功能面,比如日志、过滤等,把
  • 如果一个程序是一个管道系统,AOP 就是在管道上钻一些孔,在每个孔中注入新的代码流。
  • AOP 的实施分 3 步:切面分解、切面实现和切面合成。
  • OOP 只能沿继承树的纵向方向重用,AOP 可以沿横向方向重用。

AOP 面向切面编程 转载地址

  • 面向对象关注于每个对象定义的完整性
  • 切面是关注于整个对象系统的某个/某些特定功能面,比如日志、过滤等,把这些特定功能面剥离出来达到共用的目的

User.php

<?php

class User {
    private $name;

    function set_name($value) {
        $this->name = $value;
    }

    function get_name() {
        return $this->name;
    }
}

#$c1 = new User();
#$c1->set_name("Colin");
#$name = $c1->get_name();
#echo "name = ", $name, "\n";

?>

现在如果想在用户名字设置或读取的时候记录日志,该怎么做?
你可以创建一个动态的日志处理对象,把这个用户对象包装在其中,这样看起来用户对象的动作都会通知到其包装日志类一样

Logged.php

<?php

require_once(__dir__ . "/User.php");

class Logged {
    private $obj;

    function __call($method, $args) {
        echo $method, "(", join(",", $args), ")\n";
        return call_user_func_array(array(&$this->obj, $method), $args);
    }

    function __construct($obj) {
        $this->obj = $obj;
    }
}

$c1 = new Logged(new User());
$c1->set_name("Colin");
$name = $c1->get_name();
echo "name = ", $name, "\n";

?>

Output

set_name(Colin)
get_name()
name = Colin

调用代码还是一样,但这一次,任何对User方法的访问,都会被echo出来(你可以把echo替换其他的逻辑,如安全控制、日志记录、数据过滤等)

就好比在User对象的方法被调用时被某个钩子函数给挂载了,进行了预处理后置处理

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
6月前
|
设计模式 SQL 运维
面向切面:AOP(1)
面向切面:AOP(1)
66 2
面向切面:AOP(1)
|
6月前
|
Java 程序员 Maven
Spring AOP入门指南:轻松掌握面向切面编程的基础知识
Spring AOP入门指南:轻松掌握面向切面编程的基础知识
|
6月前
AOP&面向切面编程
AOP&面向切面编程
87 0
|
17天前
|
安全 Java 编译器
什么是AOP面向切面编程?怎么简单理解?
本文介绍了面向切面编程(AOP)的基本概念和原理,解释了如何通过分离横切关注点(如日志、事务管理等)来增强代码的模块化和可维护性。AOP的核心概念包括切面、连接点、切入点、通知和织入。文章还提供了一个使用Spring AOP的简单示例,展示了如何定义和应用切面。
51 1
什么是AOP面向切面编程?怎么简单理解?
|
5月前
|
前端开发 Java 数据库
浅谈Spring AOP 面向切面编程 最通俗易懂的画图理解AOP、AOP通知执行顺序~
浅谈Spring AOP 面向切面编程 最通俗易懂的画图理解AOP、AOP通知执行顺序~
|
6月前
|
XML 监控 安全
Spring特性之一——AOP面向切面编程
Spring特性之一——AOP面向切面编程
78 1
|
1月前
|
Java 容器
AOP面向切面编程
AOP面向切面编程
42 0
|
3月前
|
Java Spring XML
掌握面向切面编程的秘密武器:Spring AOP 让你的代码优雅转身,横切关注点再也不是难题!
【8月更文挑战第31天】面向切面编程(AOP)通过切面封装横切关注点,如日志记录、事务管理等,使业务逻辑更清晰。Spring AOP提供强大工具,无需在业务代码中硬编码这些功能。本文将深入探讨Spring AOP的概念、工作原理及实际应用,展示如何通过基于注解的配置创建切面,优化代码结构并提高可维护性。通过示例说明如何定义切面类、通知方法及其应用时机,实现方法调用前后的日志记录,展示AOP在分离关注点和添加新功能方面的优势。
53 0
|
4月前
|
Java Spring 容器
Spring问题之Spring AOP是如何实现面向切面编程的
Spring问题之Spring AOP是如何实现面向切面编程的
|
4月前
|
设计模式 缓存 程序员
Spring6(三):面向切面AOP(1)
Spring6(三):面向切面AOP(1)
36 1