techdev-solutions / exar
EXAR - PHP 的 AOP 框架
v0.1.0
2015-01-09 19:03 UTC
Requires
- php: >=5.3
- ext-tokenizer: *
- nikic/fast-route: master
- nikic/php-parser: 1.0.*@dev
This package is not auto-updated.
Last update: 2024-09-24 07:27:16 UTC
README
PHP 的轻量级 AOP 层。
安装
使用 Exar 的最简单方法是通过 Composer 安装。
在项目根目录中创建一个 composer.json
文件,并定义依赖项
{
"require": {
"techdev-solutions/exar": "dev-master"
},
"minimum-stability": "dev"
}
在项目中安装 Composer
curl -s http://getcomposer.org/installer | php
告诉 Composer 下载并安装依赖项
php composer.phar install
现在您可以使用 Exar 编码了!
使用 Exar 创建简单的 PHP 应用程序
创建一个包含 PHP 类(例如 /lib/MyProject/Person.php
)的包,该类将成为 Exar 提供的 AOP 功能
namespace MyProject;
/**
* @Exar
*/
class Person {
private $firstName;
private $lastName;
public function __construct($firstName, $lastName) {
$this->firstName = $firstName;
$this->lastName = $lastName;
}
/**
* @Track
*/
public function setFirstName($firstName) {
$this->firstName = $firstName;
}
public function getFirstName() {
return $this->firstName;
}
public function getLastName() {
return $this->lastName;
}
}
在项目根目录中创建 index.php
文件,该文件将是您的应用程序的主文件
/** load Composer dependencies */
require_once 'vendor/autoload.php';
/** add your class directory (where MyProject/Person.php is) to the include path */
set_include_path(dirname(__FILE__) . '/lib/' . PATH_SEPARATOR . get_include_path());
/** register namespaces that will be loaded by Exar (the namespace of Person.php) */
Exar\Autoloader::register(dirname(__FILE__) . '/_cache', array('MyProject'));
$person = new MyProject\Person('John', 'Smith');
echo 'first name = '.$person->getFirstName() . PHP_EOL;
echo 'last name = '.$person->getLastName() . PHP_EOL;
$person->setFirstName('Jim');
echo 'first name = '.$person->getFirstName() . PHP_EOL;
echo 'last name = '.$person->getLastName() . PHP_EOL;
现在运行 index.php
并查看控制台输出
first name = John
last name = Smith
Before invocation: MyProject\Person->setFirstName (03.07.2014 11:45:48)
After returning: MyProject\Person->setFirstName (03.07.2014 11:45:48)
After invocation: MyProject\Person->setFirstName (03.07.2014 11:45:48)
first name = Jim
last name = Smith
发生了什么?
您创建了一个 Person
对象并打印了姓和名。之后,您再次设置了姓。由于 setFirstName
方法被注解为 @Track
,Exar 会拦截方法执行并调用相应的拦截器代码。在这种情况下,@Track
只会回显类和被拦截的方法的名称,以及当前的时间戳。此示例显示了 Exar 的工作方式:它基于 docblocks 中的注解向您的 PHP 类添加功能。
敬请期待更多文档和示例!