My new php extension for aop programming named: 'xaop'
| From: | 李景港 | Date: | Wed, 10 Oct 2018 10:53:23 +0000 |
| Subject: | My new php extension for aop programming named: 'xaop' | ||
| Groups: | php.pecl.dev | ||
| Request: | Send a blank email to pecl-dev+get-15509@lists.php.net to get a copy of this message | ||
Hello, everybody, i’m a php developer comes from china. After developed the extension named
“Xaop” i wan to show it to phper for better uses of the AOP programming. the project can be
found in github:
https://github.com/liqiongfan/xaop
Here are some introduce and some usage of the extension “Xaop”:
1: PHPDoc based aop:
```php
<?php
/**
* @Aspect
*/
class Swing
{
/**
*@api(type=JSON, charset=UTF-8)
*/
public function good()
{
return [ ‘name’ => ‘Xaop’, ‘version’ => ‘0.99’];
}
}
```
The xaop can parse the phpdoc and fetch the annotation of the doc, and do the aop job.
Xaop contains the internal annotation support, which were: @api @disable @deprecated @before
@after @success @failure and the user-defined annotation(need to implements the interface:
Xaop\Annotations)
2: The method injection aop:
Method injection aop support five aop mode:
1. before
use the function :Xaop::addBeforeAop() to do the job.
2. after
use Xaop::addAfterAop().
3. after_return
use Xaop::addAfterReturnAop().
4. after_throw
use Xaop::addAfterThrowAop().
5. around
use Xaop::AddAroundAop() to do the job.
Here are some example for using the Xaop extension:
1: for before|after aop
class Swing
{
function __get() { echo ‘yes’; }
}
Xaop::addBeforeAop(Swing::class, ‘__get*’, function(){
echo ‘before swing::__get()’;
});
after doing the above job. when calling the __get function, it will first run the aop function and
then the user-class function
so output was:
``
before swing::__get() yes``
2. around aops:
class Swing
{
function __get() { echo ‘yes’; }
}
Xaop::addAroundAop(Swing::class, ‘__get*’, function($xaopExec){
echo ‘before’;
Xaop::exec($xaopExec);// This will run the metod context. currently means the Swing::__get() method
echo ‘after’;
});
so output was:
```
before
yes
after
```
The around aop will catch the all process of the target method, you can determine where|when to run.
wish every one loves it. for this goal, i want to have a pecl account, please give me have a try.
Thank you.