安装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 是一个 PHP 的 PECL 扩展,必须先安装扩展本身才能使用其功能。
注意:aop-php 是一个 C 扩展,不是纯 PHP 包,不能仅通过 Composer 安装。在 Linux 或 macOS 上可以通过 PECL 安装:
pecl install aop
然后在 php.ini 中启用扩展:
立即学习“PHP免费学习笔记(深入)”;
extension=aop.so
安装完成后,重启 PHP 服务,并用以下命令验证是否加载成功:
php -m | grep aop
虽然 aop-php 扩展本身不能通过 Composer 安装,但你可以用 Composer 来组织项目结构和自动加载类。
{
"autoload": {
"psr-4": {
"App\": "src/"
}
}
}运行以下命令生成自动加载文件:
PHP是一种功能强大的网络程序设计语言,而且易学易用,移植性和可扩展性也都非常优秀,本书将为读者详细介绍PHP编程。 全书分为预备篇、开始篇和加速篇三大部分,共9章。预备篇主要介绍一些学习PHP语言的预备知识以及PHP运行平台的架设;开始篇则较为详细地向读者介绍PKP语言的基本语法和常用函数,以及用PHP如何对MySQL数据库进行操作;加速篇则通过对典型实例的介绍来使读者全面掌握PHP。 本书
472
composer dump-autoload
在 src/Service.php 中定义一个简单的服务类:
namespace App;
class Service
{
public function doAction()
{
echo "执行核心业务逻辑
";
}
}创建一个切面类来拦截方法的调用。例如,在方法执行前和执行后输出日志。
新建 src/LoggingAspect.php:
namespace App;
class LoggingAspect
{
public function beforeMethod($joinPoint)
{
$method = $joinPoint->getFunctionName();
echo "[前置通知] 即将执行方法: $method
";
}
public function afterMethod($joinPoint)
{
$method = $joinPoint->getFunctionName();
echo "[后置通知] 已完成执行方法: $method
";
}
}使用 aop-php 提供的函数来定义切入点(pointcut)和通知(advice)。
创建入口文件 index.php:
<?php
require_once 'vendor/autoload.php';
use AppService;
use AppLoggingAspect;
// 前置通知:匹配 App\Service 类中的所有方法
aop_add_before('App\Service->*', 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 支持多种切入点表达式:
也可以使用 aop_add_around 实现环绕通知,更灵活地控制执行流程。
以上就是如何使用 composer 和 aop-php 实现 AOP 编程?的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号