phppkg/annotations

Simple and Lightweight PHP Class & Methods Annotations Reader

v1.0.0 2021-09-27 05:40 UTC

This package is auto-updated.

Last update: 2024-11-20 04:43:07 UTC


README

GitHub tag (latest SemVer) Github Actions Status Php Version

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
            )

    )

Creating Annotated objects.

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
                    )

            )

    )

unit test

phpunit

Related

LICENSE

MIT