berlioz / php-doc
Berlioz PhpDoc 是一个PHP库,用于读取代码中的文档(类、方法和函数)并进行高级注释解释。
v1.1.0
2020-11-05 14:00 UTC
Requires
- php: ^7.1 || ^8.0
- ext-json: *
- ext-mbstring: *
- psr/log: ^1.0
- psr/simple-cache: ^1.0
Requires (Dev)
- phpunit/phpunit: ^7.4 || ^8.0 || ^9.0
README
Berlioz PhpDoc 是一个PHP库,用于通过高级注释解释读取代码中的文档(类、方法和函数)。
安装
Composer
您可以使用 Composer 安装 Berlioz PhpDoc,这是推荐的安装方式。
$ composer require berlioz/php-doc
依赖
- PHP ^7.1 || ^8.0
- 包
- psr/simple-cache
- psr/log
使用
基本
$phpDocFactory = new PhpDocFactory; // To get class PhpDoc $doc = $phpDocFactory->getClassDoc(ClassOfMyProject::class); // To get class property PhpDoc $doc = $phpDocFactory->getPropertyDoc(ClassOfMyProject::class, 'myProperty'); // To get class method PhpDoc $doc = $phpDocFactory->getMethodDoc(ClassOfMyProject::class, 'myMethod'); // To get function PhpDoc $doc = $phpDocFactory->getFunctionDoc('myFunction');
缓存
该库支持PSR-16(缓存库的通用接口)。
要使用它,您需要将缓存管理器作为第一个参数传递给 PhpDocFactory 类。
$simpleCacheManager = new MySimpleCacheManager; $phpDocFactory = new PhpDocFactory($simpleCacheManager);
这样,您就可以实现磁盘I/O优化,并且您的应用程序将比不使用缓存管理器时运行得更快。
Berlioz\PhpDoc\DocBlock 类
当您调用这些工厂方法时,会返回一个 DocBlock 类或它们的数组
PhpDocFactory::getClassDocs()返回一个Berlioz\PhpDoc\DocBlock数组PhpDocFactory::getClassDoc()返回一个Berlioz\PhpDoc\DocBlock\ClassDocBlock对象PhpDocFactory::getPropertyDoc()返回一个Berlioz\PhpDoc\DocBlock\PropertyDocBlock对象PhpDocFactory::getMethodDoc()返回一个Berlioz\PhpDoc\DocBlock\MethodDocBlock对象PhpDocFactory::getFunctionDoc()返回一个Berlioz\PhpDoc\DocBlock\FunctionDocBlock对象
一些方法可以通过 DocBlock 对象访问
DocBlock::getTitle()返回 PhpDoc 中的标题部分DocBlock::getDescription()返回 PhpDoc 中的描述部分DocBlock::getTags()返回 PhpDoc 中所有存在的标签DocBlock::getTag()返回 PhpDoc 中存在的标签DocBlock::hasTag()返回标签是否存在于 PhpDoc 中
通过扩展 DocBlock 类,还有更多方法可供使用
Berlioz\PhpDoc\DocBlock\FunctionDocBlock:FunctionDocBlock::getName(): 返回函数的完整名称FunctionDocBlock::getShortName(): 返回函数的短名称FunctionDocBlock::getNamespaceName(): 返回函数的命名空间名称FunctionDocBlock::getClassName(): 返回类的名称FunctionDocBlock::isDisabled(): 确定函数是否被禁用FunctionDocBlock::isUserDefined(): 确定是否为用户定义的函数FunctionDocBlock::isInternal(): 确定函数是否为内部函数FunctionDocBlock::isClosure(): 确定函数是否为闭包FunctionDocBlock::isDeprecated(): 确定函数是否已弃用FunctionDocBlock::isGenerator(): 确定函数是否为生成器FunctionDocBlock::isVariatic(): 确定函数是否为可变函数
Berlioz\PhpDoc\DocBlock\ClassDocBlock:ClassDocBlock::getName(): 返回类的完整名称ClassDocBlock::getShortName(): 返回类的短名称ClassDocBlock::getNamespaceName(): 返回类的命名空间名称ClassDocBlock::isAbstract(): 确定类是否为抽象类ClassDocBlock::isFinal(): 确定类是否为最终类ClassDocBlock::isInternal(): 确定类是否为内部类ClassDocBlock::isUserDefined(): 确定是否为用户定义的类ClassDocBlock::isAnonymous(): 确定类是否为匿名类ClassDocBlock::isCloneable(): 确定类是否可克隆ClassDocBlock::isInstantiable(): 确定类是否可实例化ClassDocBlock::isInterface():判断类是否为接口ClassDocBlock::isIterable():判断类是否可迭代ClassDocBlock::isIterateable():判断类是否可迭代ClassDocBlock::isTrait():判断类是否为特性
Berlioz\PhpDoc\DocBlock\PropertyDocBlock:PropertyDocBlock::getName():返回属性的完整名称PropertyDocBlock::getShortName():返回属性的简称PropertyDocBlock::getNamespaceName():返回类的命名空间名称PropertyDocBlock::getClassName():返回类的名称PropertyDocBlock::isPublic():判断属性是否有公开可见性PropertyDocBlock::isProtected():判断属性是否有受保护可见性PropertyDocBlock::isPrivate():判断属性是否有私有可见性PropertyDocBlock::isStatic():判断属性是否为静态PropertyDocBlock::isDefault():判断属性是否为默认
Berlioz\PhpDoc\DocBlock\MethodDocBlock:MethodDocBlock::getName():返回方法的完整名称MethodDocBlock::getShortName():返回方法的简称MethodDocBlock::getNamespaceName():返回类的命名空间名称MethodDocBlock::getClassName():返回类的名称MethodDocBlock::isConstructor():判断方法是否为构造函数MethodDocBlock::isDestructor():判断方法是否为析构函数MethodDocBlock::isPublic():判断方法是否有公开可见性MethodDocBlock::isProtected():判断方法是否有受保护可见性MethodDocBlock::isPrivate():判断方法是否有私有可见性MethodDocBlock::isStatic():判断方法是否为静态MethodDocBlock::isAbstract():判断方法是否为抽象MethodDocBlock::isFinal():判断方法是否为最终MethodDocBlock::isUserDefined():判断是否为用户定义方法MethodDocBlock::isInternal():判断方法是否为内部方法MethodDocBlock::isClosure():判断方法是否为闭包MethodDocBlock::isDeprecated():判断方法是否已弃用MethodDocBlock::isGenerator():判断方法是否为生成器MethodDocBlock::isVariatic():判断方法是否为可变
标签
格式
库支持一些标签格式,DocBlock 类返回的值是 PHP 代码而不是字符串。
示例
/** * Test doc. * * My description of my method. * Multi-line. * * @test false * @novalue * @value Only text * @test2("test", param1=true, param2="test", param3={"test":"test"}) * @value Second text * @jsonTest {"test":"test"} * @jsonArrayTest [{"test":"test"}, {"test2":"test2"}] */
DocBlock::getTags() 方法的返回结果是
array(6) {
["test"]=>
array(1) {
[0]=>
object(Berlioz\PhpDoc\Tag) (2) {
["name":"Berlioz\PhpDoc\Tag":private]=>
string(4) "test"
["value":"Berlioz\PhpDoc\Tag":private]=>
bool(false)
}
}
["novalue"]=>
array(1) {
[0]=>
object(Berlioz\PhpDoc\Tag) (2) {
["name":"Berlioz\PhpDoc\Tag":private]=>
string(7) "novalue"
["value":"Berlioz\PhpDoc\Tag":private]=>
NULL
}
}
["value"]=>
array(2) {
[0]=>
object(Berlioz\PhpDoc\Tag) (2) {
["name":"Berlioz\PhpDoc\Tag":private]=>
string(5) "value"
["value":"Berlioz\PhpDoc\Tag":private]=>
string(9) "Only text"
}
[1]=>
object(Berlioz\PhpDoc\Tag) (2) {
["name":"Berlioz\PhpDoc\Tag":private]=>
string(5) "value"
["value":"Berlioz\PhpDoc\Tag":private]=>
string(11) "Second text"
}
}
["test2"]=>
array(1) {
[0]=>
object(Berlioz\PhpDoc\Tag) (2) {
["name":"Berlioz\PhpDoc\Tag":private]=>
string(5) "test2"
["value":"Berlioz\PhpDoc\Tag":private]=>
array(4) {
[0]=>
string(4) "test"
["param1"]=>
bool(true)
["param2"]=>
string(4) "test"
["param3"]=>
object(stdClass) (1) {
["test"]=>
string(4) "test"
}
}
}
}
["jsonTest"]=>
array(1) {
[0]=>
object(Berlioz\PhpDoc\Tag) (2) {
["name":"Berlioz\PhpDoc\Tag":private]=>
string(8) "jsonTest"
["value":"Berlioz\PhpDoc\Tag":private]=>
object(stdClass) (1) {
["test"]=>
string(4) "test"
}
}
}
["jsonArrayTest"]=>
array(1) {
[0]=>
object(Berlioz\PhpDoc\Tag) (2) {
["name":"Berlioz\PhpDoc\Tag":private]=>
string(13) "jsonArrayTest"
["value":"Berlioz\PhpDoc\Tag":private]=>
array(2) {
[0]=>
object(stdClass) (1) {
["test"]=>
string(4) "test"
}
[1]=>
object(stdClass) (1) {
["test2"]=>
string(5) "test2"
}
}
}
}
}
可用标签
一些标签默认可用
Berlioz\PhpDoc\Tag\ParamTagBerlioz\PhpDoc\Tag\ReturnTagBerlioz\PhpDoc\Tag\VarTag
扩展
您可以扩展标签并将它们声明给解析器。您的标签必须实现 TagInterface 接口。
$phpDocFactory = new PhpDocFactory; $phpDocFactory->getParser()->addTagClass('tagName', MyTagClass::class);