AOP 通知类型
通知代码我们可以用很多中方式表现我之前提到这些通知代码依赖你使用的框架但是有些你需要熟悉的类型请看下面
前通知返回后通知抛出后通知周边通知
前通知
在你的代码中一些特殊点之前使用通知正常是调用一个方法
迄今为止为了简化概念和为了让你更快的理解你的代码我经常把通知写到方法里但是在真实的环境里通知经常是不写在方法里的应该有一个独立的控制器每个方法都在这个控制器里而且每个方法都包裹着AOP的功能这个全局的控制器运行在整个系统里而且对我们是不可见的
<?php
class PathController
{
function controlPaths($className $funcName) {
Authentication::checkAuthentication()
$classObj = new $className()
$classObj>$funcName()
}
}
在这里假设有这么一个类主要是用于给你展现这个类实际上发生了什么事情假设那个controlPaths方法是应用中全局切入点访问应用中的每个方法都需要通过这个方法访问上面的方法中在执行每个方法之前我们调用了通知checkAuthentication()这就是前通知
返回后通知
这个通知在指定功能执行完后只执行一次并且返回那个访问点考虑下面的代码
<?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()
}
}
[] []