在AOP术语中,实行点被称为连接点。
这些点的凑集称为切入点,在连接点之前、之后或“周围”实行的新行为称为关照。
你可以在Introduction部分阅读更多关于AOP的内容。

安装

AOP框架可以与composer一起安装。
安装非常大略

Step 1 利用composer下载库

php对象初始化GoPHP面向对象的现代AOP框架 Bootstrap

请composer下载最新版本的Go!
AOP框架及其依赖项,运行以下命令:

composer require goaop/framework

Composer会将框架安装到项目的 vendor/goaop/framework 目录中。

Step 2 创建运用程序切面内核

这个框架的目的是为您的运用程序供应大略的AOP集成。
你必须首先为你的运用程序创建 AspectKernel 类。
这个类将在一个地方管理运用程序的所有方面。

该框架供应了基类,使创建自己的内核变得更随意马虎。
要创建运用程序内核,请扩展抽象类 Go\Core\AspectKernel

<?php// app/ApplicationAspectKernel.phpuse Go\Core\AspectKernel;use Go\Core\AspectContainer;/ Application Aspect Kernel /class ApplicationAspectKernel extends AspectKernel{ / Configure an AspectContainer with advisors, aspects and pointcuts @param AspectContainer $container @return void / protected function configureAop(AspectContainer $container) { }}

Step 3 在前端掌握器中配置aspect内核

要配置方面内核,请调用内核实例的 init() 方法。

// front-controller, for Symfony2 application it's web/app_dev.phpinclude __DIR__ . '/vendor/autoload.php'; // use composer// Initialize an application aspect container$applicationAspectKernel = ApplicationAspectKernel::getInstance();$applicationAspectKernel->init([ 'debug' => true, // use 'false' for production mode 'appDir' => __DIR__ . '/..', // Application root directory 'cacheDir' => __DIR__ . '/path/to/cache/for/aop', // Cache directory // Include paths restricts the directories where aspects should be applied, or empty for all source files 'includePaths' => [ __DIR__ . '/../src/' ]]);

Step 4 创建一个方面

方面是AOP哲学的关键元素。
走!
AOP框架只利用大略的PHP类来声明方面,这使得面向工具的所有特性都可以用于方面类。
作为一个例子,让我们截取所有的方法并显示它们的名称:

// Aspect/MonitorAspect.phpnamespace Aspect;use Go\Aop\Aspect;use Go\Aop\Intercept\FieldAccess;use Go\Aop\Intercept\MethodInvocation;use Go\Lang\Annotation\After;use Go\Lang\Annotation\Before;use Go\Lang\Annotation\Around;use Go\Lang\Annotation\Pointcut;/ Monitor aspect /class MonitorAspect implements Aspect{ / Method that will be called before real method @param MethodInvocation $invocation Invocation @Before("execution(public Example->())") / public function beforeMethodExecution(MethodInvocation $invocation) { echo 'Calling Before Interceptor for: ', $invocation, ' with arguments: ', json_encode($invocation->getArguments()), "<br>\n"; }}

很大略,不是吗?我们在这里声明,我们希望在实行Example类中的所有动态公共方法之前安装一个钩子。
这是在注释#0的帮助下完成的#钩子可以是任何类型,你稍后会看到它们。
但是我们不改变类Example中的任何代码
我能感想熏染到你的惊异。

Step 5 在方面内核中注册方面

要注册aspect,只需在内核的 configureAop() 方法中添加它的实例:

// app/ApplicationAspectKernel.phpuse Aspect\MonitorAspect;//... protected function configureAop(AspectContainer $container) { $container->registerAspect(new MonitorAspect()); }//...

Step 6 可选配置

默认情形下,Go!
AOP利用 Doctrine\Common\Cache\FilesystemCache 来缓存注释。
但是,如果您须要利用任何其他缓存引擎进行注释,您可以通过运用程序方面内核的 annotationCache 配置选项配置缓存驱动程序。
唯一的哀求是缓存驱动程序实现 Doctrine\Common\Cache\Cache 接口。

这在支配到只读文件系统时非常有用。
在这种情形下,你可以利用,例如: Doctrine\Common\Cache\ArrayCache 或一些基于内存的缓存驱动程序。