Simple and Lightweight PHP Class & Methods Annotations Reader
Forked from eriknyk/Annotations
- composer 命令
composer require phppkg/annotations
- composer.json
{
"require": {
"phppkg/annotations": "dev-master"
}
}
- 直接拉取
git clone https://github.com/phppkg/annotations.git // github
Sample class User.php
<?php
/**
* @Defaults(name="user1", lastname = "sample", age='0', address={country=USA, state=NY}, phone="000-00000000")
* @assertResult(false)
* @cache(collation = UTF-8)
*/
class User
{
/**
* @cache(true)
* @type(json)
* @limits(start=10, limit=50)
*/
function load(){
}
/**
* create a record
*
* @Permission(view)
* @Permission(edit)
* @Role(administrator)
*/
public function create()
{
}
}
Sample use.
- get class annotations:
include 'User.php';
$annotations = new PhpPkg\Annotations\Annotations();
$result = $annotations->getClassAnnotations('User');
print_r($result);
Result:
Array
(
[Defaults] => Array
(
[0] => Array
(
[name] => user1
[lastname] => sample
[age] => 0
[address] => Array
(
[country] => USA
[state] => NY
)
[phone] => 000-00000000
)
)
[assertResult] => Array
(
[0] => false
)
[cache] => Array
(
[0] => Array
(
[collation] => UTF-8
)
)
)
- get method annotations:
$result = $annotations->getMethodAnnotations('User', 'create');
print_r($result);
Result:
Array
(
[Permission] => Array
(
[0] => view
[1] => edit
)
[Role] => Array
(
[0] => administrator
)
)
You can crate fast annotated objects.
Sample Annotated Classes.
<?php
// Annotation.php
abstract class Annotation
{
protected $data = array();
public function __construct($args = array())
{
$this->data = $args;
}
public function set($key, $value)
{
$this->data[$key] = $value;
}
public function get($key, $default = null)
{
if (empty($this->data[$key])) {
return $default;
}
return $this->data[$key];
}
public function exists($key)
{
return isset($this->data[$key]);
}
}
<?php
// PermissionAnnotation.php
namespace Annotation;
class PermissionAnnotation extends Annotation
{
}
<?php
namespace Base\Annotation;
// RoleAnnotation.php
class RoleAnnotation extends Annotation
{
}
require dirname(__DIR__) . '/tests/boot.php';
$annotations->setDefaultAnnotationNamespace('\Annotation\\');
$result = $annotations->getMethodAnnotationsObjects('User', 'create');
print_r($result);
Result:
Array
(
[Permission] => Base\Annotation\PermissionAnnotation Object
(
[data:protected] => Array
(
[0] => view
[1] => edit
)
)
[Role] => Base\Annotation\RoleAnnotation Object
(
[data:protected] => Array
(
[2] => administrator
)
)
)
phpunit
MIT