仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2038|回复: 20
打印 上一主题 下一主题

[学习教程] PHP网页设计PHP系列进修之AOP

[复制链接]
第二个灵魂 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-3 23:30:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
一些真正的强人总会搞出新玩意来丢给你,你不学就落后了,也印证了前人的经验,果然是学无止境啊!     
  引见
  你之前传闻过AOP(Aspect Oriented Programming)吗?固然在php方面,仿佛没有过量的利用,然而在企业级开辟中,AOP被普遍利用。我将借此文,向人人引见PHP方面的AOP。
  这篇文章次要注释AOP的概念。
  甚么是AOP?
  在使用开辟中,咱们常常发明需求良多功效,这些功效需求常常被分离在代码中的多个点上,然而这些点现实上跟实践营业没有任何干联。好比,在履行一些特别义务之前需求确保用户是在上岸形态中,咱们把这些特别人物就叫做"cross-cutting concerns",让咱们经由过程Wikipedia来懂得一下"cross-cutting concerns"(横向关系)的界说。
  在盘算机迷信中,"cross-cutting concerns"指的是“切面(或偏向)编程”。这些关系不克不及从其他体系(框架设计或某些完成)中很好的分化出来,以致于呈现代码反复,在体系中存在成心义的依附关系,或二者兼有之。
  如今你关于“横向关系”应当有一个基本的熟悉,让咱们看看他们在代码中是怎样的?
  假定一种场景,你是一个博客站点的编纂。你需求上岸站点,然落后行创立帖子,验证帖子,编纂帖子等等。假如你没有上岸,那末你应当直接到上岸界面。为了确保这些行动是平安的,以上的任何操作都需求停止无效验证,代码以下。
复制代码

    1. <?php  
    复制代码

  • class BlogPost extends CI_Controller   
  • {   
  •      public function createPost() {   
  •          if (!Authentication::checkAuthentication()) {   
  •              // redirect to login   
  •          }   
  •          else {   
  •              // proceed   
  •              Messages::notifyAdmin();   
  •          }   
  •      }   
  •    
  •      public function approvePost() {   
  •          if (!Authentication::checkAuthentication()) {   
  •              // redirect to login   
  •          }   
  •          else {   
  •              // proceed   
  •          }   
  •      }   
  •    
  •      public function editPost() {   
  •          if (!Authentication::checkAuthentication()) {   
  •              // redirect to login   
  •          }   
  •          else {   
  •              // proceed   
  •          }   
  •      }   
  •    
  •      public function viewPost() {   
  •          // ...   
  •      }   
  • }  
  看下面的代码,你会发明在每一个办法之前都挪用了checkAuthentication(),由于这些行动需求用户上岸以后才干停止。还有就是notifyAdmin()来分辨是不是是办理员帐号,以便创立新贴。看见没有,有良多“反复的代码”,并且BlogPost类,应当仅担任办理帖子。验证和分辨身份应该是分别的。咱们违背了“单一职责准绳”。
  单一职责准绳讲述的是每一个类应当只要单一的义务(义务),并且应当把全部义务都封装在一个类中。一切办事应当依照职责严谨而平衡的停止散布。
  迄今为止,咱们可以分明AOP所表达的意思。横向切面关系被成组的放进一个类中,咱们管这个类叫“切面”。从咱们中心代码平分离横向切面关系的进程就叫做Aspect Oriented Programming。
  AOP专业术语
  有良多前提专门用于注释AOP的特征。了解这些前提将是你胜利把AOP集成到你的项目中的钥匙
  Aspect;Advice;Joinpoint;Pointcut
  咱们已进修到切面(Aspect)是甚么!如今让咱们懂得一下其他三个前提意味着甚么?
  Advice(告诉)
  Advice用于挪用Aspect(切面),正如其名所暗示,Advice用于界说某种情形下做甚么和甚么工夫做这件工作。在咱们之前的例子中,checkAuthentication(做甚么)是advice(告诉),在指定办法中它应当在履行代码之前(甚么工夫)被挪用。
  Joinpoint(接入点)
  Joinpoint是咱们创立Advice使用中的地位。再翻看之前的代码,你会发明我挪用了几个与营业逻辑没有直接联系关系的功效。在createPost()中,如,cross-cutting concerns应当在履行验证逻辑之前和发送信息给办理员以后产生。这些都多是接入点。
  在你的使用代码中,接入点可以放置在任何地位。然而Advice仅能在某些点中安排,这要依据你的AOP框架,事后我会会商。
  Pointcut(点切割)
  点切割界说了一种把告诉婚配到某些接入点的体例。固然在咱们的例子中只要一对接入点,然而在你的使用中你可以放置上千个接入点,你也不需求把告诉使用到一切的接入点上。你可以把一些你以为有需要的接入点绑定到告诉上。
  假定咱们想要告诉 createPost(),approvePost() 和 editPost(),然而如今没有viewPost()。咱们利用某种办法把这三种办法绑定到告诉上。以后咱们创立一个包括切面细节的XML文件,这些细节包括一些婚配接入点的正则表达式。
  总结:当有横向切入关系存在于咱们的使用的时分,咱们可以创立一个切面,这个切面在一些选择利用点切割的接入点上使用告诉功效。
  AOP 告诉类型
  告诉代码咱们可以用良多中体例体现。我之条件到,这些告诉代码依附你利用的框架,然而有些你需求熟习的类型,请看上面:
  前告诉;前往后告诉;抛出后告诉;周边告诉
  前告诉
  在你的代码中一些特别点之前利用告诉——正常是挪用一个办法。
  迄今为止,为了简化概念和为了让你更快的了解你的代码,我常常把告诉写到办法里。然而在真实的情况里,告诉常常是不写在办法里的。应当有一个自力的掌握器,每一个办法都在这个掌握器里,并且每一个办法都包裹着AOP的功效。这个全局的掌握器运转在全部体系里,并且对咱们是不成见的。
复制代码

    1. <?php  
    复制代码

  • class PathController   
  • {   
  •      function controlPaths($className, $funcName) {   
  •          Authentication::checkAuthentication();   
  •          $classObj = new $className();   
  •          $classObj->$funcName();   
  •      }   
  • }  
  在这里假定有这么一个类,次要是用于给你展示这个类实践上产生了甚么工作。假定谁人controlPaths办法是使用中全局切入点,会见使用中的每一个办法都需求经由过程这个办法会见。下面的办法中在履行每一个办法之前,咱们挪用了告诉checkAuthentication()。——这就是前告诉。
  前往后告诉
  这个告诉在指定功效履行完后只履行一次,而且前往谁人会见点。思索上面的代码:
复制代码

    1. <?php  
    复制代码

  • class PathController   
  • {   
  •      function controlPaths($className, $funcName) {   
  •          $classObj = new $className();   
  •          $classObj->$funcName();   
  •          Database::closeConnection();   
  •      }   
  • }  
  注重这里,当办法完成以后,咱们清算了数据库资本。在前往告诉以后,咱们挪用这个告诉。
  抛出后告诉
  假如在履行历程时代函数抛出异常,那末在抛出完异常以后使用告诉。这里是抛出完异常以后,告诉就酿成毛病提醒。
复制代码

    1. <?php  
    复制代码

  • class PathController   
  • {   
  •      function controlPaths($className, $funcName) {   
  •          try {   
  •              $classObj = new $className();   
  •              $classObj->$funcName();   
  •          }   
  •          catch (Exception $e) {   
  •              Error::reportError();   
  •          }   
  •      }   
  • }  
  周边告诉
  第四种告诉是周边告诉,他是前告诉和前往后告诉的兼并体。
复制代码

    1. <?php  
    复制代码

  • class PathController   
  • {   
  •      function controlPaths($className, $funcName) {   
  •          Logger::startLog();   
  •          $classObj = new $className();   
  •          $classObj->$funcName();   
  •          Logger::endLog();   
  •      }   
  • }  
怎么培养啊 别光说不练啊,好 ,比如新人入门自己步是配置环境,虽然现在都有很多的集成环境,但是真实的体验下配置环境还是会有很多帮助,不论是你以后工作还是在真实的linux下开发。
若相依 该用户已被删除
沙发
发表于 2015-2-4 00:04:04 | 只看该作者
对于懒惰的朋友,我推荐php的集成环境xampp或者是wamp。这两个软件安装方便,使用简单。但是我还是强烈建议自己动手搭建开发环境。
小女巫 该用户已被删除
板凳
发表于 2015-2-8 06:16:14 | 只看该作者
作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。
不帅 该用户已被删除
地板
发表于 2015-2-9 18:10:52 | 只看该作者
建数据库表的时候,int型要输入长度的,其实是个摆设的输入几位都没影响的,只要大于4就行,囧。
若天明 该用户已被删除
5#
发表于 2015-2-9 19:09:14 | 只看该作者
php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会)
分手快乐 该用户已被删除
6#
发表于 2015-2-27 17:22:18 | 只看该作者
使用zendstdio 写代码的的时候,把tab 的缩进设置成4个空格是很有必要的
谁可相欹 该用户已被删除
7#
发表于 2015-3-2 03:43:54 | 只看该作者
做为1门年轻的语言,php一直很努力。
飘飘悠悠 该用户已被删除
8#
发表于 2015-3-9 02:23:23 | 只看该作者
其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎
变相怪杰 该用户已被删除
9#
发表于 2015-3-16 20:10:27 | 只看该作者
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
因胸联盟 该用户已被删除
10#
发表于 2015-3-23 00:04:03 | 只看该作者
个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。
海妖 该用户已被删除
11#
发表于 2015-3-30 13:46:01 | 只看该作者
先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。
精灵巫婆 该用户已被删除
12#
发表于 2015-4-1 13:09:09 | 只看该作者
其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。
莫相离 该用户已被删除
13#
发表于 2015-4-2 22:47:09 | 只看该作者
微软最近出的新字体“微软雅黑”,虽然是挺漂亮的,不过firefox  支持的不是很好,所以能少用还是少用的好。
小妖女 该用户已被删除
14#
发表于 2015-4-4 13:16:43 | 只看该作者
当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标,
简单生活 该用户已被删除
15#
发表于 2015-4-13 11:49:22 | 只看该作者
至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。
蒙在股里 该用户已被删除
16#
发表于 2015-4-28 17:44:18 | 只看该作者
如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域,
老尸 该用户已被删除
17#
发表于 2015-4-29 19:28:35 | 只看该作者
我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。
兰色精灵 该用户已被删除
18#
发表于 2015-5-2 00:13:11 | 只看该作者
个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。
冷月葬花魂 该用户已被删除
19#
发表于 2015-5-5 06:19:04 | 只看该作者
实践是检验自己会不会的真理。
乐观 该用户已被删除
20#
发表于 2015-5-11 22:08:23 | 只看该作者
为了以后维护的方便最好是代码上都加上注释,“予人方便,自己方便”。此外开发文档什么的最好都弄齐全。我觉得这是程序员必备的素质。虽然会消耗点很多的时间。但是确实是非常有必要的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-22 15:08

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表