安装aop-php扩展并启用extension=aop.so,2. 用Composer配置自动加载,3. 编写Service类和LoggingAspect切面,4. 在index.php中通过aop_add_before和aop_add_after织入日志逻辑。

使用 Composer 和 aop-php 实现 AOP(面向切面编程)可以让你在不修改原有业务逻辑的前提下,动态织入横切关注点,比如日志、权限检查、性能监控等。下面介绍如何一步步配置和使用。
安装 aop-php 扩展
aop-php 是一个 PHP 的 PECL 扩展,必须先安装扩展本身才能使用其功能。
注意:aop-php 是一个 C 扩展,不是纯 PHP 包,不能仅通过 Composer 安装。在 Linux 或 macOS 上可以通过 PECL 安装:
pecl install aop
然后在 php.ini 中启用扩展:
立即学习“PHP免费学习笔记(深入)”;
extension=aop.so
安装完成后,重启 PHP 服务,并用以下命令验证是否加载成功:
php -m | grep aop
使用 Composer 管理项目依赖
虽然 aop-php 扩展本身不能通过 Composer 安装,但你可以用 Composer 来组织项目结构和自动加载类。
{
"autoload": {
"psr-4": {
"App\\": "src/"
}
}
}
运行以下命令生成自动加载文件:
composer dump-autoload
编写示例业务类
在 src/Service.php 中定义一个简单的服务类:
namespace App;
class Service
{
public function doAction()
{
echo "执行核心业务逻辑\n";
}
}
定义切面(Aspect)
创建一个切面类来拦截方法的调用。例如,在方法执行前和执行后输出日志。
新建 src/LoggingAspect.php:
namespace App;
class LoggingAspect
{
public function beforeMethod($joinPoint)
{
$method = $joinPoint->getFunctionName();
echo "[前置通知] 即将执行方法: $method\n";
}
public function afterMethod($joinPoint)
{
$method = $joinPoint->getFunctionName();
echo "[后置通知] 已完成执行方法: $method\n";
}
}
配置 AOP 切面织入规则
使用 aop-php 提供的函数来定义切入点(pointcut)和通知(advice)。
创建入口文件 index.php:
*', function ($joinPoint) {
(new LoggingAspect())->beforeMethod($joinPoint);
});
// 后置通知
aop_add_after('App\\Service->*', function ($joinPoint) {
(new LoggingAspect())->afterMethod($joinPoint);
});
// 调用业务方法
$service = new Service();
$service->doAction();
运行结果会是:
[前置通知] 即将执行方法: doAction 执行核心业务逻辑 [后置通知] 已完成执行方法: doAction
支持的通配符和语法
aop-php 支持多种切入点表达式:
- Class->method:精确匹配某个方法
- Class->*:匹配类中所有公共方法
- *->doAction:匹配所有类中的 doAction 方法
- *->*Action:匹配以 Action 结尾的方法
也可以使用 aop_add_around 实现环绕通知,更灵活地控制执行流程。
注意事项
- aop-php 扩展目前只支持 PHP 7.0~8.1,PHP 8.2+ 可能尚未兼容。
- 该扩展属于底层 C 扩展,生产环境使用需谨慎,确保稳定性与调试能力。
- 如果无法安装扩展,可考虑纯 PHP 实现的 AOP 框架,如 Go! AOP 或 Laravel 自带的事件监听机制模拟 AOP。











