博客
关于我
php之aop实践
阅读量:792 次
发布时间:2023-03-01

本文共 2271 字,大约阅读时间需要 7 分钟。

AOP-PHP简介与实践指南

AOP(面向切面编程)是一种动态代理技术,通过预编译和运行期动态代理,在不修改源代码的情况下为程序添加功能。它是GoF设计模式的延续,旨在实现调用者与被调用者之间的解耦。

AOP-PHP是一种PHP扩展,支持面向方面编程,无需编译或其他中间步骤。其设计简洁,适合在PHP中实现横切关注点的分离(如缓存、日志、安全、交易等)。

AOP-PHP安装

安装方式有两种:

  • 使用PECL安装:sudo pecl install aop-beta

  • 手动安装:git clone https://github.com/AOP-PHP/AOPcd AOPphpize./configure --with-aop --with-php-config=/usr/bin/php-configmakemake install

  • 安装完成后,在php.ini中添加模块:extension=aop.so

    常见错误处理安装过程中可能遇到autoconf问题:sudo wget http://ftp.gnu.org/gnu/autoconf/autoconf-latest.tar.gztar -zxf autoconf-latest.tar.gzrpm -qf /usr/bin/autoconfrpm -e --nodeps autoconf-2.59-12./configure --prefix=/usrmake && make install

    AOP-PHP学前准备

    专业术语Aspect(切面):横向关注点的集合。Advice(通知):定义切面执行的动作,包括前通知、后通知、周边通知等。Joinpoint(接入点):通知的执行位置。Pointcut(点切割):定义通知匹配接入点的方式。Attribute(属性):用于标记切面。

    AOP-PHP实践之通知

    前通知示例testfunction.php:

    ';}?>

    testaop.php:

    test.php执行结果:这是前切点测试函数:aop_add_before

    类测试testclass.php:

    testaop.php:

    testBeforAdd1()', $testpoint2);?>

    test.php执行结果:这是前切点测试函数:aop_add_before这是前切点测试类方法:testClass1

    类属性测试testclass.php:

    getKindOfAdvice() === AOP_KIND_BEFORE_WRITE_PROPERTY) { $testclass1->shoot($aop_tjp->getObject()->getName(), $aop_tjp->getAssignedValue()); }};aop_add_before('testClass2->publicProperty1', $testpoint2);?>

    test.php执行结果:这是前切点测试函数:aop_add_beforeskyboy 想要 测试前通知类属性截取

    返回后通知示例testfunction.php:

    testaop.php:

    test.php执行结果:这是返回后通知测试:aop_add_after

    周边通知示例testfunction.php:

    testaop.php:

    getArguments(); if ($args[0] !== null) { $args[0] = '我想测试'; } if ($args[1] !== null) { $args[1] = '周边通知:'; } $object->setArguments($args); $object->process(); $returnValue = $object->getReturnedValue(); $returnValue .= 'aop_add_around'; $object->setReturnedValue($returnValue);};aop_add_around('testFunc3()', $testaround);?>

    test.php执行结果:我想测试周边通知:aop_add_around

    AOP-PHP函数说明getKindOfAdvice:获取通知类型。getArguments/setArguments:获取/设置方法参数。getReturnedValue/setReturnedValue:获取/设置方法返回值。process:执行方法。

    AOP-PHP开启和关闭创建aopopenclose.php:

    ";function foo() { echo "I'm foo";}$adviceShowFoo = function () { echo "After foo";};aop_add_after('foo()', $adviceShowFoo);foo();ini_set('aop.enable', '0');echo "aop is now disabled
    ";foo();echo "But you can still register new aspects
    ";aop_add_after('f*()', $adviceShowFoo);foo();ini_set('aop.enable', '1');echo "Aop is now enabled
    ";foo();?>

    运行结果展示了AOP的状态切换情况。

    转载地址:http://ldtfk.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现XZordering算法(附完整源码)
    查看>>
    Objective-C实现y = x的平方函数的积分运算(附完整源码)
    查看>>
    Objective-C实现z-algorithm算法(附完整源码)
    查看>>
    Objective-C实现Zeller 的同余算法 (附完整源码)
    查看>>
    Objective-C实现zellers congruence泽勒一致算法(附完整源码)
    查看>>
    Objective-C实现Zero One Knapsack零一背包计算算法(附完整源码)
    查看>>
    Objective-C实现一个Pangram字符串至少包含一次所有字母算法(附完整源码)
    查看>>
    Objective-C实现一个stack算法(附完整源码)
    查看>>
    Objective-C实现一个通用的堆算法(附完整源码)
    查看>>
    Objective-C实现一分钟倒计时(附完整源码)
    查看>>
    Objective-C实现一阶高斯滤波(附完整源码)
    查看>>
    Objective-C实现万年历(附完整源码)
    查看>>
    Objective-C实现三次样条曲线(附完整源码)
    查看>>
    Objective-C实现三维空间点到直线的距离(附完整源码)
    查看>>
    Objective-C实现三维空间点到直线的距离(附完整源码)
    查看>>
    Objective-C实现三重缓冲区(附完整源码)
    查看>>
    Objective-C实现上传文件到FTP服务器(附完整源码)
    查看>>
    Objective-C实现下载文件(附完整源码)
    查看>>
    Objective-C实现不重复字符的最长子串算法(附完整源码)
    查看>>
    Objective-C实现两个字符串由相同的字母组成但排列方式不同(字符串字谜)算法(附完整源码)
    查看>>