返回顶部
首页 > 资讯 > 后端开发 > 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://lsjlt.com/news/288154.html(转载时请注明来源链接)

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

猜你喜欢
  • 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中+=是什么意思
    在 php 中,+= 运算符用于将变量或表达式的值加到另一个变量中,工作原理是将变量的现有值与表达式的值相加并存储回变量。它通常用于递增或累加值,但只能用于数字值,不能用于字符串或其他数...
    99+
    2024-04-27
  • php中===是什么意思
    php 中的 === 运算符用于比较两个表达式的值和类型是否完全相等。它会在值和类型都相等时返回 true,否则返回 false。 PHP 中的 === 运算符 在 PHP 中,===...
    99+
    2024-04-27
  • php中.=是什么意思
    php 中的 .= 运算符用于将字符串附加到变量末尾,其作用等同于 $variable = $variable . "附加字符串",可简化字符串连接,使其更简洁且可读性更强。 PHP ...
    99+
    2024-04-27
  • php中\是什么意思
    在 php 中,反斜杠(\)用于:转义特殊字符;调用命名空间;作为目录分隔符(在 windows 系统中)。 *PHP 中的 * 在 PHP 中,反斜杠(\)具有多种用法,主要用于转义...
    99+
    2024-04-27
    linux macos
  • php中是什么意思
    php中的$globals是一个内置的超全局变量,可用于访问当前脚本中定义的所有全局变量,包括访问其他函数定义的全局变量、修改其他函数定义的全局变量以及在嵌套函数中访问外部范围的全局变量...
    99+
    2024-04-27
  • php中/是什么意思
    / 运算符在 php 中执行浮点除法,将被除数除以除数,返回一个浮点结果。如果操作数为整数,结果将截断为整数;如果涉及浮点数,结果将为浮点数;除数为 0 会触发错误。 /运算符在 PH...
    99+
    2024-04-27
  • php中@是什么意思
    php 中的 @ 运算符用于抑制错误报告,它会将紧随其后的表达式的错误和警告消息抑制掉。它将错误和警告消息发送到服务器日志中。常用于调试、错误处理和输出控制。不能抑制致命错误,过度使用可...
    99+
    2024-04-27
  • php中==是什么意思
    php中==运算符比较两个表达式的值是否相等。它按照规则比较值和类型,执行类型转换以匹配不相等类型,并返回true(相等)或false(不相等)。与===运算符不同,后者不转换类型,只有...
    99+
    2024-04-27
  • php中||是什么意思
    php 中的 || 运算符代表逻辑 or,用于连接布尔表达式。如果左操作数为 true,则整个表达式为 true,无论右操作数是什么;如果左操作数为 false,则表达式继续评估右操作数...
    99+
    2024-04-27
  • php中++是什么意思
    php 中 ++ 的含义 在 PHP 中,++ 运算符是一个单目运算符,用于对一个变量或表达式的值进行递增操作。 如何使用 ++ 运算符 前 ++ (前缀递增):将 ++ 放在变量或表达...
    99+
    2024-04-27
    c++
  • php中%是什么意思
    php中的%符号用于字符串格式化,它是格式说明符的一部分。格式说明符包含占位符和格式标志:占位符 (%s):变量占位符,表示字符串。格式标志:%d:整数%f:浮点数%s:字符串%b:二进...
    99+
    2024-04-29
  • php中::是什么意思
    在 php 中,:: 运算符用于调用静态方法或访问静态属性,允许直接从类名访问静态元素,无需实例化该类。好处包括方便、效率和清晰度。 :: 在 PHP 中的含义 定义:在 PHP 中,...
    99+
    2024-04-29
  • 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中cgi是什么意思
    本教程操作环境:windows10系统、PHP7.1版、DELL G3电脑php中cgi是什么意思简单来说 CGI、 FastCGI只是一个协议而已, php-cgi 是实现cgi的程序, php-fpm是管理php-cgi的一个管理器而已...
    99+
    2020-04-25
    PHP
  • php中range是什么意思
    本教程操作环境:windows10系统、PHP7.1版、DELL G3电脑php中range是什么意思range() 函数创建一个包含指定范围的元素的数组。该函数返回一个包含从 low 到 high 之间的元素的数组。注释:如果 low 参...
    99+
    2019-06-26
    PHP
  • 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开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作