saberyjs/annotation

这个库解析PHP注释

1.2.1 2018-03-11 06:19 UTC

This package is auto-updated.

Last update: 2024-09-05 13:40:24 UTC


README

如果你使用过PHP的ReflectionClassReflectionMethod,你会找到一个名为getDocComment的方法,这意味着我们可以获取指定类(及其方法)的注释,因此我们可以对其进行一些操作。你还记得Java Web的注解吗?这是一个强大的开发工具,但这个库并不完全如此,它只是解析注释,因为我们永远不知道你想要做什么,对吧?

如何使用

这个库支持两种功能,如下

获取文档注释

首先我们假设有一个名为Student的类

class  Student{
    /**
     * @type post
     * @https true
     * **/
    public function  getName(){
        return '';
    }
}
$doc=\saberyjs\annotation\Annotation::getAnnotation();

Annotation::getAnnotation() 返回一个原始字符串

解析注释

在我们进入实际代码之前,我们必须了解一个名为解析器的概念,每种类型的解析器都必须实现一个名为Parser的接口,这个接口非常简单,我会给你展示代码

namespace  saberyjs\annotation;

interface  Parser {
    /**
     * @param  $doc string
     * @return  array|null
     * **/
    public function parse($doc);
}

每个解析器都必须实现parse方法,这是唯一的方法,这个库有两个内部解析器,StandardAnnotationParserPlainAnnotationParser,当然,你可以在任何时候编写自己的解析器(必须实现Parser接口)。如果你使用StandardAnnotationParser,代码如下

$doc=\saberyjs\annotation\Annotation::getAnnotation(Student::class);
$parser=new \saberyjs\annotation\StandardAnnotationParser();
$parts=\saberyjs\annotation\Annotation::parseAnnotation($doc,$parser);

如果你记得名为Student的类,你会发现它有一个名为getName的方法,该方法有一些注释,我们在这里粘贴它

/**
     * @type post
     * @https true
     * **/

因此,在调用Annotation::parseAnnotation方法并使用StandardAnnotationParser之后,你将得到一个数组,其格式如下

$ret=[[
    'name'=>'type',
    'value'=>'post'
    ],[
       'name'=>'https',
       'value'=>'true'
    ]
];

你可以用任何你想要的方式使用$ret,如果你对它感兴趣,你可以阅读名为thinkphp5-route-helper的composer包

联系方式

我是一名在中国深圳的PHP开发者,如果你也喜欢开源,你可以联系我,我的QQ是1174332406

最后但同样重要的是,祝你有个美好的一天!!