各类知识收集,PHP技术分享与解决方案各类知识收集,PHP技术分享与解决方案各类知识收集,PHP技术分享与解决方案

Str Tom,为分享PHP技术和解决方案,贡献一份自己的力量!
收藏本站(不迷路),每天更新好文章!
当前位置:首页 > CMS教程 > PHP

PHP实现AOP的基础

管理员 2023-09-05
PHP
150

PHP实现AOP的基础

内容导读

收集整理的这篇技术教程文章主要介绍了PHP实现AOP的基础,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2756字,纯文字阅读大概需要4分钟

内容图文

这篇文章主要介绍了关于PHP实现AOP的基础,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

AOP是OOP的延续,是Aspect Oriented Programming的缩写,意思是面向方面编程,有的又称之为面向切面编程。在企业级开发中面向方面编程很有用。比如,我们在调用某些特定的方法之前,我们需要作一个日志记录,调用方法之后,我们还需要一个日志记录。我们先来看看不使用AOP,我们在PHP里怎么实现。

<?php/** * 日志类  */ class SystemLog {     function beforeLog() {         // write before log     }        function afterLog() {            // write after log         }} /** * 新闻类  */ class News extends SystemLog {     function add() {         $this->beforeLog();         // add news        $this->afterLog();    }     function delete() {            // delete news        }}

我们定义一个日志类,类里包含两个方法beforeLog()和afterLog(),用于记录方法调用前和调用后的日志,接着我们定义了新闻类,新闻类继承日志类,要在调用add()方法前后完成日志记录,我们只有在add()方法内部调用beforeLog()和afterLog()两个方法。虽然我们实现在调用add()方法前/后记录日志,但是这样的代码在OOP编程中一点儿也不优雅,也违背了“弱耦合,强内聚”的思想,因为News类下的add()方法就只是应该做添加新闻这一件事情,然后我们在add()方法中又记了日志,另外如果我们需要为很多方法增加日志记录功能,那么将会调用很多次beforeLog()和afterLog()方法,带来很多重复代码。

在PHP5中,如果调用未定义的方法,将自动调用_call()方法。利用PHP5的这个特点,我们可以在_call()方法中实现AOP编程,这种AOP编程只是一个AOP雏形,没有Java那样强大。

<?php/** * 日志类  */ class SystemLog {     function _call($method,$args) {         $method = "_$method"; // 在要调用的方法名前加‘_’,$method为要调用的方法名        // write before log        $return = call_user_func_array(array($this, $method), $args);                // write after log         return $return;    } } /** * 新闻类  */ class News extends SystemLog {     function _add() {         // add news     }     function delete() {            // delete news        }}

新闻类还是继承日志类,需要注意的是我们在add()方法前加了‘_’,add()方法中并没有任何日志记录相关的代码。

$news = new News();$news->add();

调用News类中的add()方法,注意重写后的News类中并没有add()方法,只有_add()方法,这时PHP找不到add()方法则会自动调用_call()方法,_call()方法有两个参数,第一个参数为被调用方法的名称,第二个参数为被调用方法的参数,在_call()方法中首先为被调用的方法名前添加‘_’,这里,添加‘_’后的方法后就变成了_add,_add()方法在News类中是存在的,然后写方法调用前日志,接着使用call_user_func_array()函数执行前对象方法调用,方法调用完成再写方法调用后日志。

回顾一下,我们利用编程惯例和PHP5中调用未定义的方法将自动调用_call()方法的特性,实现了AOP,但这里的AOP还只是雏形,功能还不够强大,随着PHP的发展,我相信未来的PHP在AOP方面也会更加强大。

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

关于PHP的AOP思想的解析

以上就是PHP实现AOP的基础的详细内容,更多请关注Gxl网其它相关文章!

内容总结

以上是为您收集整理的PHP实现AOP的基础全部内容,希望文章能够帮你解决PHP实现AOP的基础所遇到的程序开发问题。 如果觉得技术教程内容还不错,欢迎将网站推荐给程序员好友。

内容备注

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

相关推荐

扫码关注

qrcode

QQ交谈

回顶部