PHP 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对象的方法被调用时被某个钩子函数给挂载了,进行了预处理后置处理

时间: 2024-11-09 14:19:11

PHP AOP 面向切面的相关文章

spring aop面向切面编程:如何来做一个强大的日志记录功能

这个东西怎么做:spring aop 面向切面编程 如何来做一个强大的日志记录功能模板; 昨天经理把这个任务交给我,让我为公司现在的项目加上一个详细的日志记录功能模板,对所有的操作,至少是增删改运作进行一个记录,其要记录操作者,以及执行的方法,IP,以及操作的方法的参数. 我以前做过类似的功能,不过是在filter里做的,通过filter来检查action请求,记录请求中的参数及action名字.但是今天公司这个是要求用spring aop来做,这样就可以在spring里对要进行的日志记录方法进

Javascript aop(面向切面编程)之around(环绕)分析

  这篇文章主要介绍了Javascript aop(面向切面编程)之around(环绕) ,需要的朋友可以参考下 Aop又叫面向切面编程,其中"通知"是切面的具体实现,分为before(前置通知).after(后置通知).around(环绕通知),用过spring的同学肯定对它非常熟悉,而在js中,AOP是一个被严重忽视的技术点.但是利用aop可以有效的改善js代码逻辑,比如前端框架dojo和yui3中AOP则被提升至自定义事件的一种内在机制,在源码中随处可见.得益于这种抽象使得doj

yui3的AOP(面向切面编程)和OOP(面向对象编程)

  这篇文章主要介绍了yui3的AOP(面向切面编程)和OOP(面向对象编程),需要的朋友可以参考下 首先请把手放胸前成沉思状:我上了生活,还是被生活上了自己? 没想出答案把,恩,可以读下文了.从语义角度讲,同一事物的不同表述可以反映人的主观视角的不同,从哲学角度将,世界观影响方法论,我们看事物的角度不同,有时会得出截然相悖的结论,从而会影响我们的做事方式和行为准则,现实生活如此,在丰富多彩的编程语言中更是如此,编程模式充满了对现实世界的各种模拟,包括是面向过程,面向对象,还有面向切面.我们大概

Java实现AOP面向切面编程的实例教程_java

介绍 众所周知,AOP(面向切面编程)是Spring框架的特色功能之一.通过设置横切关注点(cross cutting concerns),AOP提供了极高的扩展性.那AOP在Spring中是怎样运作的呢?当你只能使用core java,却需要AOP技术时,这个问题的解答变得极为关键.不仅如此,在高级技术岗位的面试中,此类问题也常作为考题出现.这不,我的朋友最近参加了一个面试,就被问到了这样一个棘手的问题--如何在不使用Spring及相关库,只用core Java的条件下实现AOP.因此,我将在

Javascript aop(面向切面编程)之around(环绕)

Aop又叫面向切面编程,其中"通知"是切面的具体实现,分为before(前置通知).after(后置通知).around(环绕通知),用过spring的同学肯定对它非常熟悉,而在js中,AOP是一个被严重忽视的技术点.但是利用aop可以有效的改善js代码逻辑,比如前端框架dojo和yui3中AOP则被提升至自定义事件的一种内在机制,在源码中随处可见.得益于这种抽象使得dojo的自定义事件异常强大和灵活.dojo中aop的实现在dojo/aspect模块中,主要有三个方法:before.

yui3的AOP(面向切面编程)和OOP(面向对象编程)_YUI.Ext相关

首先请把手放胸前成沉思状:我上了生活,还是被生活上了自己? 没想出答案把,恩,可以读下文了.从语义角度讲,同一事物的不同表述可以反映人的主观视角的不同,从哲学角度将,世界观影响方法论,我们看事物的角度不同,有时会得出截然相悖的结论,从而会影响我们的做事方式和行为准则,现实生活如此,在丰富多彩的编程语言中更是如此,编程模式充满了对现实世界的各种模拟,包括是面向过程,面向对象,还有面向切面.我们大概已经非常熟悉面向过程和面向对象,切面的英文是Aspects(有时译作方面,我感觉用切面更能贴切的表达A

Javascript aop(面向切面编程)之around(环绕)分析_javascript技巧

Aop又叫面向切面编程,其中"通知"是切面的具体实现,分为before(前置通知).after(后置通知).around(环绕通知),用过spring的同学肯定对它非常熟悉,而在js中,AOP是一个被严重忽视的技术点.但是利用aop可以有效的改善js代码逻辑,比如前端框架dojo和yui3中AOP则被提升至自定义事件的一种内在机制,在源码中随处可见.得益于这种抽象使得dojo的自定义事件异常强大和灵活.dojo中aop的实现在dojo/aspect模块中,主要有三个方法:before.

MVC AOP面向切面编程简单介绍及实例_java

MVC AOP面向切面编程 AOP这个词相信大家都没有接触太多过,但是实际上你们已经有所接触了,就在设计模式中.AOP所用的思想其实和设计模式是一样的,即在不修改原代码的情况下统一增加或者修改功能.还有,AOP大多用在spring里面,但是本文所写的只是在MVC中的应用,要注意. 一.简介         所谓AOP(Aspect Oriented Programming的缩写)意为面向切面的编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开发中

Guice框架-AOP(@面向切面编程)

2.AOP 面向切面编程 2.1 AOP入门 在前面的章节主要讲Guice的依赖注入,有了依赖注入的基础后我们再来看Guice的AOP.我们先从一个例子入手,深入浅出的去理解Guice的AOP的原理和实现. 首先我们定义服务Service,这个服务有一个简单的方法sayHello,当然了我们有一个服务的默认实现ServiceImpl,然后使用@ImplementedBy将服务和默认实现关联起来,同时将服务的实现标注为单例模式. 1 @ImplementedBy(ServiceImpl.class