PHP语言动态特性-面向切面
来源:互联网 发布:wordpress建站软件 编辑:程序博客网 时间:2024/05/23 00:40
PHP语言动态特性的更多用例
下面的例子类似面向切面编程,其和面向对象不同的地方在于,面向对象关注于每个对象定义的完整性,
而切面是关注于整个对象系统的某个/某些特定功能面,比如日志、过滤等,把这些特定功能面剥离出来达到共用的目的。
Listing 8. 简单的User类
<?phpclass User{ private $name; function set_name( $value ) { $this->name = $value; } function get_name() { return $this->name; }}$c1 = new User();$c1->set_name( "Jack" );$name = $c1->get_name();echo( "name = $name\n" );?>
这个对象足够简单,现在如果想在用户名字设置或读取的时候记录日志,该怎么做?
你可以创建一个动态的日志处理对象,把这个用户对象包装在其中,这样看起来用户对象的动作都会通知到其包装日志类一样。
Listing 9. 动态包装类
<?phpclass 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( "Jack" );$name = $c1->get_name();echo( "name = $name\n" );?>
调用代码还是一样,但这一次,任何对User方法的访问,都会被echo出来。(你可以把echo替换其他的逻辑,如安全控制、日志记录、数据过滤等)
就好比在User对象的方法被调用时被某个钩子函数给挂载了,进行了预处理或后置处理。
by iefreer
- PHP语言动态特性-面向切面
- PHP语言动态特性-面向切面
- PHP AOP 面向切面
- PHP面向切面编程组件
- 黑马程序员-动态代理(面向切面)
- 动态代理AOP(面向切面编程)
- PHP语言的动态特性-Going dynamic with PHP
- PHP面向对象特性
- 面向切面
- PHP面向对象----继承特性
- PHP面向对象相关特性
- PHP面向对象高级特性
- PHP面向对象特性-封装
- PHP面向对象特性-继承
- PHP面向对象特性-多态
- AOP面向切面编程(二) 动态代理
- JAVA 动态代理与AOP编程(面向切面编程)
- JDK的动态代理-面向切面编程简单使用
- ubuntu下sublime中文输入最简单的解决方案
- CppUnit的使用心得
- 人生感悟:7个自我
- 嵌入式系统开发人员的知识结构
- 中小型机构通用虚拟化架构
- PHP语言动态特性-面向切面
- Core Animation基础介绍、简单使用CALayer以及多种动画效果
- Linux设备驱动,等待队列
- 两年一瞬间
- 1.2 实现C语言风格的字符串反转的算法
- Yii框架模型类的实现以及PHP5动态语言特性的应用
- QQ宠物保姆
- Flume1.3.1配置-汇聚节点
- C#学习笔记--方法和参数修饰符