jan-swiecki / simple-annotations
简单的注释解析器
Requires
- php: >=5.3.0
README
安装
获取composer并学习如何使用它。
库位于packagist。
如果您拒绝使用composer,则可以使用include_once "src/DocBlockReader/Reader.php"代替include_once "vendor/autoload.php"。
测试
您需要PHPUnit。在获取它后运行
> git clone https://github.com/jan-swiecki/php-simple-annotations
> cd php-simple-annotations
> composer install
> phpunit
简介
这个库为您提供提取和自动解析DocBlock注释块的能力。
示例
class TestClass {
/**
* @x 1
* @y yes!
*/
private $myVar;
}
$reader = new \DocBlockReader\Reader('TestClass', 'myVar', 'property');
$x = $reader->getParameter("x"); // 1 (with number type)
$y = $reader->getParameter("y"); // "yes!" (with string type)
因此,如您所见,要完成此操作,您需要构造一个指向某个对象的Reader对象,然后提取数据。
您可以指向类、类方法和类属性。
- 指向类:
$reader = new \DocBlockReader\Reader(String $className) - 指向方法或属性:
$reader = new \DocBlockReader\Reader(String $className, String $name [, String $type = 'method'] )
这将初始化指向方法$className::$name或属性$className::$name的DocBlock Reader。
要选择方法,请仅使用两个参数,或提供第三个参数为method字符串值。要获取属性值,请将property字符串值放在第三个参数中。
要提取解析后的属性,您有两种方法
$reader->getParameter(String $key)
返回参数$key的DocBlock值。例如。
<?php class MyClass { /** * @awesomeVariable "I am a string" */ public function fn() { } }
然后
$reader = new \DocBlockReader\Reader('MyClass', 'fn'); $reader->getParameter("awesomeVariable")
将返回字符串I am a string(不带引号)。
$reader->getParameters()
返回所有参数的数组(请参阅下面的示例)。
API
-
构造函数
$reader = new \DocBlockReader\Reader(String $className [, String $name [, String $type = 'method'] ])创建一个指向类、类方法或类属性的
Reader对象——基于提供的参数(请参阅简介)。 -
$reader->getParameter(String $key)
返回从DocBlock中提取的$key参数的值。
$reader->getParameters()
返回所有参数的数组(请参阅下面的示例)。
$reader->getVariableDeclarations()- 请参阅下面的最后一个示例。
示例
基于ReaderTest.php的示例。
注意:DocBlock Reader根据上下文转换值类型(请参阅下面)。
类型转换示例
<?php include_once "vendor/autoload.php"; class MyClass { /** * @var0 1.5 * @var1 1 * @var2 "123" * @var3 abc * @var4 ["a", "b"] * @var5 {"x": "y"} * @var6 {"x": {"y": "z"}} * @var7 {"x": {"y": ["z", "p"]}} * * @var8 * @var9 null * * @var10 true * @var11 tRuE * @var12 false * @var13 null * */ private function MyMethod() { } }; $reader = new DocBlockReader\Reader("MyClass", "MyMethod"); var_dump($reader->getParameters());
将打印
array (size=14)
'var0' => float 1.5
'var1' => int 1
'var2' => string '123' (length=3)
'var3' => string 'abc' (length=3)
'var4' =>
array (size=2)
0 => string 'a' (length=1)
1 => string 'b' (length=1)
'var5' =>
array (size=1)
'x' => string 'y' (length=1)
'var6' =>
array (size=1)
'x' =>
array (size=1)
'y' => string 'z' (length=1)
'var7' =>
array (size=1)
'x' =>
array (size=1)
'y' =>
array (size=2)
0 => string 'z' (length=1)
1 => string 'p' (length=1)
'var8' => boolean true
'var9' => null
'var10' => boolean true
'var11' => boolean true
'var12' => boolean false
'var13' => null
多值示例
<?php include_once "vendor/autoload.php"; class MyClass { /** * @var x * @var2 1024 * @param string x * @param integer y * @param array z */ private function MyMethod() { } }; $reader = new DocBlockReader\Reader("MyClass", "MyMethod"); var_dump($reader->getParameters());
将打印
array (size=3)
'var' => string 'x' (length=1)
'var2' => int 1024
'param' =>
array (size=3)
0 => string 'string x' (length=8)
1 => string 'integer y' (length=9)
2 => string 'array z' (length=7)
同一行的变量
<?php include_once "vendor/autoload.php"; class MyClass { /** * @get @post * @ajax * @postParam x @postParam y * @postParam z */ private function MyMethod() { } }; $reader = new DocBlockReader\Reader("MyClass", "MyMethod"); var_dump($reader->getParameters());
将打印
array (size=4)
'get' => boolean true
'post' => boolean true
'ajax' => boolean true
'postParam' =>
array (size=3)
0 => string 'x' (length=1)
1 => string 'y' (length=1)
2 => string 'z' (length=1)
变量声明功能示例
我发现下面的功能对于在CodeIgniter中过滤$_GET/$_POST数据很有用。希望我很快会发布我的CodeIgniter修改版。
<?php include_once "vendor/autoload.php"; class MyClass { /** * @param string var1 * @param integer var2 */ private function MyMethod() { } }; $reader = new DocBlockReader\Reader("MyClass", "MyMethod"); var_dump($reader->getVariableDeclarations("param"));
将打印
array (size=2)
0 =>
array (size=2)
'type' => string 'string' (length=6)
'name' => string 'var1' (length=4)
1 =>
array (size=2)
'type' => string 'integer' (length=7)
'name' => string 'var2' (length=4)