https://github.com/next-laboratory/aop
一款用于常驻内存型PHP应用的简单的Aop组件。
https://github.com/next-laboratory/aop
aop di pcntl php
Last synced: about 1 month ago
JSON representation
一款用于常驻内存型PHP应用的简单的Aop组件。
- Host: GitHub
- URL: https://github.com/next-laboratory/aop
- Owner: next-laboratory
- License: apache-2.0
- Created: 2022-04-28T05:13:37.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2025-11-06T10:30:16.000Z (2 months ago)
- Last Synced: 2025-11-06T19:24:48.613Z (2 months ago)
- Topics: aop, di, pcntl, php
- Language: PHP
- Homepage:
- Size: 121 KB
- Stars: 9
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# !!! 不能生产使用,仅作为研究用途
一款简单Aop实现。支持常驻内存型PHP应用。可以方便接入nextphp, Swoole,WebMan等框架。
# 环境要求
```
php 8.2
开启passthru函数
```
# 安装
```shell
composer require next/aop
```
# 使用,以下以webman为例
## 修改start.php文件
```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
proceed(); // 直接调用被代理的方法
// $result = $joinPoint->process(); // 继续执行其他切面逻辑
echo 'after';
return $result;
}
}
```
修改方法添加切面注解
```php
注意上面添加了两个注解,属性和方法注解的作用分别为注入属性和切入方法,可以直接在控制器中打印属性$request发现已经被注入了,切面注解可以有多个,会按照顺序执行。具体实现可以参考这两个类,注意这里的Inject注解并不是从webman容器中获取实例,所以使用的话需要重新定义Inject以保证单例
你也可以使用`AspectConfig`注解类配置要切入的类,例如上面的切面类
```php
process();
echo 'after';
return $result;
}
}
```
那么`BaconQrCode\Writer`类的`writeFile`方法将会被切入,该注解可以传递第三个参数数组,作为该切面构造函数的参数
## 启动
```shell
php start.php start
```
打开浏览器打开~~对应页面~~
## 控制台输出内容为
```
before--controller--after
```