广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >PHP中AOP是什么意思
  • 651
分享到

PHP中AOP是什么意思

2023-06-17 09:06:15 651人浏览 八月长安
摘要

小编给大家分享一下PHP中aop是什么意思,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!什么是AOP?在应用开发中,我们经常发现需要很多功能,这些功能需要经常被分

小编给大家分享一下PHPaop是什么意思,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

什么是AOP?

在应用开发中,我们经常发现需要很多功能,这些功能需要经常被分散在代码中的多个点上,但是这些点事实上跟实际业务没有任何关联。比如,在执行一些特殊任务之前需要确保用户是在登陆状态中,我们把这些特殊人物就叫做"cross-cutting concerns",让我们通过Wikipedia来了解一下"cross-cutting concerns"(横向关系)的定义。

在计算机科学中,"cross-cutting concerns"指的是“切面(或方向)编程”。这些关系不能从其他系统(框架设计或者某些实现)中很好的分解出来,以至于出现代码重复,在系统中存在有意义的依赖关系,或者两者兼有之。

现在你对于“横向关系”应该有一个基础的认识,让我们看看他们在代码中是怎么样的?

假设一种场景,你是一个博客站点的编辑。你需要登陆站点,然后进行创建帖子,验证帖子,编辑帖子等等。如果你没有登陆,那么你应该直接到登陆界面。为了确保这些行为是安全的,以上的任何操作都需要进行有效验证,代码如下。

<?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 通知类型

通知代码我们可以用很多中方式表现。我之前提到,这些通知代码依赖你使用的框架,但是有些你需要熟悉的类型,请看下面:

前通知;返回后通知;抛出后通知;周边通知

前通知

在你的代码中一些特殊点之前使用通知&mdash;&mdash;正常是调用一个方法。

迄今为止,为了简化概念和为了让你更快的理解你的代码,我经常把通知写到方法里。但是在真实的环境里,通知经常是不写在方法里的。应该有一个独立的控制器,每个方法都在这个控制器里,而且每个方法都包裹着AOP的功能。这个全局的控制器运行在整个系统里,而且对我们是不可见的。

<?php  class PathController  {      function controlPaths($className, $funcName) {          Authentication::checkAuthentication();          $classObj = new $className();          $classObj->$funcName();      }  }

在这里假设有这么一个类,主要是用于给你展现这个类实际上发生了什么事情。假设那个controlPaths方法是应用中全局切入点,访问应用中的每个方法都需要通过这个方法访问。上面的方法中在执行每个方法之前,我们调用了通知checkAuthentication()。&mdash;&mdash;这就是前通知。

返回后通知

这个通知在指定功能执行完后只执行一次,并且返回那个访问点。考虑下面的代码:

<?php  class PathController  {      function controlPaths($className, $funcName) {          $classObj = new $className();          $classObj->$funcName();          Database::closeConnection();      }  }

注意这里,当方法完成之后,我们清理了数据库资源。在返回通知之后,我们调用这个通知。

抛出后通知

如果在执行进程期间函数抛出异常,那么在抛出完异常之后应用通知。这里是抛出完异常之后,通知就变成错误提示。

<?php  class PathController  {      function controlPaths($className, $funcName) {          try {              $classObj = new $className();              $classObj->$funcName();          }          catch (Exception $e) {              Error::reportError();          }      }  }

周边通知

第四种通知是周边通知,他是前通知和返回后通知的合并体。

<?php  class PathController  {      function controlPaths($className, $funcName) {          Logger::startLog();          $classObj = new $className();          $classObj->$funcName();          Logger::endLog();      }  }

以上是“PHP中AOP是什么意思”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网PHP编程频道!

--结束END--

本文标题: PHP中AOP是什么意思

本文链接: https://www.lsjlt.com/news/288154.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • PHP中AOP是什么意思
    小编给大家分享一下PHP中AOP是什么意思,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!什么是AOP?在应用开发中,我们经常发现需要很多功能,这些功能需要经常被分...
    99+
    2023-06-17
  • php中=是什么意思
    本文操作环境:windows7系统、PHP7.4版、DELL G3电脑php中=是什么意思?PHP 中基础的赋值运算符是 "="。这意味着右侧赋值表达式会为左侧运算数设置值。如 z=x+y,右侧表达式为左侧运算数设置值。...
    99+
    2021-07-01
    php
  • php中shuffle是什么意思
    这篇文章主要介绍“php中shuffle是什么意思”,在日常操作中,相信很多人在php中shuffle是什么意思问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”php中shuffle是什么意思”的疑惑有所帮助!...
    99+
    2023-06-20
  • php中request是什么意思
    本篇内容介绍了“php中request是什么意思”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!request的中文意思为“请求”,是php中...
    99+
    2023-06-20
  • php中 br 是什么意思
    本文操作环境:Windows7系统,PHP7.1版,Dell G3电脑。php中 br 是什么意思?<br>和<br/>都是html标记语言,用于文本的换行,<br/>是<br>的规范写法,p...
    99+
    2017-08-29
    php br
  • php中null是什么意思
    本教程操作环境:windows10系统、PHP7.1版,DELL G3电脑php中null是什么意思一:null值是什么意思啊在php中NULL是一个特殊标记,NULL值表示一个变量没有值,NULL类型唯一可能的值就是NULL。在下列情况下...
    99+
    2018-02-05
    php
  • php中fgets是什么意思
    本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑PHP fgets是一种基于php语言开发的可以从文件指针中读取一行数据并返回数据的功能函数。fgets()函数用于从打开的文件中一次读取一行数据,该函数的语法格式如下...
    99+
    2022-02-13
    php fgets
  • PHP中construct是什么意思
    本文操作环境:windows7系统、PHP7.1版、DELL G3电脑PHP中construct是什么意思PHP __construct() 函数__construct() 函数创建一个新的 SimpleXMLElement 对象。如果成功...
    99+
    2015-09-07
    PHP construct
  • php中result是什么意思
    本教程操作环境:windows10系统、PHP7.1版,DELL G3电脑php中result是什么意思mysql_result() 函数返回结果集中一个字段的值。如果成功,则该函数返回字段值。如果失败,则返回 false。语法mysql_...
    99+
    2016-04-24
    PHP
  • php中redis是什么意思
    本教程操作环境:windows7系统、PHP7.1版,DELL G3电脑Redis是Remote Dictionary Server(远程数据服务)的缩写,由意大利人Antirez(Salvatore Sanfilippo)开发的一款内存高...
    99+
    2020-11-20
    php redis
  • php中for是什么意思
    本文操作环境:windows7系统、PHP7.1版、DELL G3电脑php中for是什么意思PHP for 循环执行代码块指定的次数。如果您已经提前确定脚本运行的次数,可以使用 for 循环。语法for (init counter; te...
    99+
    2016-05-19
    php for
  • 在php中-= 是什么意思
    本文操作环境:windows7系统、PHP7.4版、DELL G3电脑首先要知道在 PHP 中,基本的赋值运算符是 "="。它意味着左操作数被设置为右侧表达式的值。也就是说,"$x = 5" 的值是 ...
    99+
    2020-09-14
    -= php
  • php中$_FILES是什么意思
    本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑在php中,“$_FILES”是一个预定义的数组变量。预定义变量又叫超全局变量,它们不需要提前声明就可以在所有的作用域中使用。通过这些预定义变量可以获取用户会话、用户操...
    99+
    2015-04-15
    php $_FILES
  • php中flock是什么意思
    在PHP中,flock是一个函数,表示的意思是锁定或者释放文件;该函数的作用是操作文件时锁定文件,只有取消锁定时才可用,如果成功则该函数返回true,如果失败则该函数返回false,语法为“flock(file,lock,block)”。本...
    99+
    2022-07-11
    php
  • php中warning是什么意思
    本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑warning是PHP的一个报错级别,是非致命的,即,发生了该警告之后,其后的脚本仍能正常运行。表示在执行的过程中,PHP发现程序有些不合理的地方,从而提示出警告信息,...
    99+
    2018-11-02
    php warning 报错级别
  • php中mkdir是什么意思
    本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑php中mkdir是什么意思mkdir是PHP中的一个用于创建新目录的内置函数。有时侯我们需要在服务器上创建目录。比如创建以当天日期为名字的目录来备份数据,或者创建以注...
    99+
    2018-03-20
    php mkdir
  • php中session_start()是什么意思
    本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑在php中,session_start()的意思为“开始会话”。语法:session_start(array $options = array()): boolsess...
    99+
    2017-12-16
    php session_start()
  • php中gc是什么意思
    本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑在php中,gc全称“Garbage Collection”,中文意思为“垃圾回收”,是一种动态内存管理机制。垃圾回收机制(GC)会自动释放程序不再需要的已分配的内存块...
    99+
    2020-07-10
    php gc 垃圾回收机制
  • php中apc是什么意思
    本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑Alternative PHP Cache (APC) 简介Alternative PHP Cache (APC) 中文全称是“可选PHP缓存”,是一种对PHP有效的开...
    99+
    2018-03-25
    php apc
  • php中ord是什么意思
    本教程操作环境:windows10系统、PHP7.1版、DELL G3电脑php中ord是什么意思ord() 函数返回字符串中第一个字符的 ASCII 值。语法ord(string)参数 描述string 必需。要从中获...
    99+
    2019-06-05
    PHP
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作