jan-swiecki/simple-annotations

简单的注释解析器

0.3.1 2015-08-17 18:38 UTC

This package is not auto-updated.

Last update: 2024-09-14 15:16:36 UTC


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)