phpdoc-parser
高性能的 PHP 注解分析器,基于 PHP7.x 开发的一个PHP扩展
An extension for PHP document parsing. written in C code.
Author:Josin 774542602@qq.com
使用环境
PHP7.x
cmake编译或者PHP扩展编译
1、扩展编译
/usr/path_to_php/bin/phpize ./configure --with-php-config=/usr/path_to_php/php-config make -j && sudo make install -j echo 'xannotation.so' >> /usr/path_to_php/php.ini
2、cmake
需要cmake 3.10版本
修改 CMakeLists.txt中的 php 路径, 然后执行如下命令即可 cmake .即可
简洁的APIs
Xan 类构造函数
final class Xan{
function __construct();}
类注解: Xan::getClassDocComment($classNameOrObject)
/**
* 返回类的注解字符串
*
* @param $classNameOrObject 类名称或者对象
*/function getClassDocComment($classNameOrObject){
return $this;
}
方法注解:Xan::getMethodDocComment($classNameOrObject, $methodName)
/**
* 获取方法的注解信息,返回注解字符串
*
* @param $classNameOrObject 类名称或者对象
* @param $methodName 方法名
*/function getMethodDocComment($classNameOrObject, $methodName){}
解析注解:Xan::parseDocComment($docComments)
/**
* 返回一个包含注解信息的对象,[body]包含的是说明信息,其余的注解每一个注解是一个数组
* 如:
* /**
* * 类对象A
* *
* * @Route("/hello/world")
* * @NotEmpty(, )
* */
* class A
* {
* }
*
* 那么返回结果如下:
* Array
* (
* [annotations] => Array
* (
* [Route] => Array
* (
* [1] => hello/world
* )
*
* [method] => Array
* (
* [3] => vs
* [value se] => hello
* [yes] => fsdfls
* )
*
* )
*
* [num] => 2
* [body] =>
* )
*
* @param $docComments 需要解析的注解信息
*/function parseDocComment($docComments){}
获取数组形式的注解:Xan::getParseResult($docComments)
/**
* 同 parseDocComent() 结果,区别在于返回的数组还是对象
*/function getParseResult($docComments){}
获取类的所有方法的注解信息:parseAllMethodsDocComment($objectOrName)
/**
* Function: `parseAllMethodsDocComment` used to parsing all methods which in class{$objectOrName}
* return the object contains the result, the result format like this:
*
* Xan Object
* (
* [num] => 3
* [annotations] => Array
* (
* [world] => Array
* (
* [annotations] => Array
* (
* [Route] => Array
* (
* [1] => hello/world
* )
*
* [method] => Array
* (
* [3] => vs
* [value se] => hello
* [yes] => fsdfls
* )
*
* )
*
* [num] => 2
* [body] =>
* )
*
* [getMethodDocComment] => Array
* (
* [annotations] =>
* [num] => 0
* [body] => 获取方法的注解信息,返回一个对象
* )
*
* [getClassDocComment] => Array
* (
* [annotations] =>
* [num] => 0
* [body] => 返回类的注解信息
* )
* )
* )
*
*
* The result contains the `num` key means the methods number
* the `annotations` key contains the result array, each key-value pair contains the key(The function name) & the value(array)
* each value contains three key-value pairs:
* `annotations`: The annotations the function contains
* `num` : The number of the annotations
* `body` : The body of the annotations
*
* @param $objectOrName The class name or object which you want to obtain the annotations
* @return this The object contains the value
*/function parseAllMethodsDocComment($objectOrName) : this{}