next/aop
Composer 安装命令:
composer require next/aop
包简介
An AOP package that is resident in in-memory PHP frameworks, such as nextphp, WebMan.
README 文档
README
一款简单Aop实现。支持常驻内存型PHP应用。可以方便接入nextphp, Swoole,WebMan等框架。
环境要求
php 8.2
开启passthru函数
安装
composer require next/aop
使用,以下以webman为例
修改start.php文件
Aop::init( [__DIR__ . '/../app'], [ \Next\Aop\Collector\PropertyAttributeCollector::class, \Next\Aop\Collector\AspectCollector::class, ], __DIR__ . '/../runtime/aop', );
- paths 注解扫描路径
- collectors 注解收集器
- \Next\Aop\Collector\AspectCollector::class 切面收集器,取消后不能使用切面
- \Next\Aop\Collector\PropertyAttributeCollector::class 属性注解收集器,取消后不支持属性自动注入
- runtimeDir 运行时,生成的代理类和代理类地图会被缓存到这里
编写切面类,实现AspectInterface接口
<?php namespace App\aspects; use Next\Aop\ProceedingJoinPoint; use Next\Aop\Contract\AspectInterface; #[\Attribute(\Attribute::TARGET_METHOD)] class Round implements AspectInterface { public function process(ProceedingJoinPoint $joinPoint): mixed { echo 'before'; $result = $joinPoint->proceed(); // 直接调用被代理的方法 // $result = $joinPoint->process(); // 继续执行其他切面逻辑 echo 'after'; return $result; } }
修改方法添加切面注解
<?php namespace app\controller; use App\Aop\Attribute\Inject;use App\aspects\Round;use support\Request; class Index { #[Inject] protected Request $request; #[Round] public function index() { echo '--controller--'; return response('hello webman'); } }
注意上面添加了两个注解,属性和方法注解的作用分别为注入属性和切入方法,可以直接在控制器中打印属性$request发现已经被注入了,切面注解可以有多个,会按照顺序执行。具体实现可以参考这两个类,注意这里的Inject注解并不是从webman容器中获取实例,所以使用的话需要重新定义Inject以保证单例
你也可以使用AspectConfig注解类配置要切入的类,例如上面的切面类
<?php namespace App\aspects; use Next\Aop\Attribute\AspectConfig; use Next\Aop\ProceedingJoinPoint; use Next\Aop\Contract\AspectInterface; #[\Attribute(\Attribute::TARGET_METHOD)] #[AspectConfig('BaconQrCode\Writer', 'writeFile')] class Round implements AspectInterface { public function process(ProceedingJoinPoint $joinPoint): mixed { echo 'before'; $result = $joinPoint->process(); echo 'after'; return $result; } }
那么BaconQrCode\Writer类的writeFile方法将会被切入,该注解可以传递第三个参数数组,作为该切面构造函数的参数
启动
php start.php start
打开浏览器打开对应页面
控制台输出内容为
before--controller--after
next/aop 适用场景与选型建议
next/aop 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 36 次下载、GitHub Stars 达 9, 最近一次更新时间为 2023 年 10 月 31 日, 在 PHP 生态内属于活跃度较高的组件。
我们在过去多个企业项目中使用过 next/aop 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 next/aop 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
统计信息
- 总下载量: 36
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 10
- 点击次数: 25
- 依赖项目数: 1
- 推荐数: 0
其他信息
- 授权协议: Apache-2.0
- 更新时间: 2023-10-31