2022年01月14日整理发布:php怎么获取方法的注释

2022-01-14 16:06:07
导读跟大家讲解下有关服务器端编程语言(专业超文本预处理器的缩写)怎么获取方法的注释,相信小伙伴们对这个话题应该也很关注吧,现在就为小伙伴...

跟大家讲解下有关服务器端编程语言(专业超文本预处理器的缩写)怎么获取方法的注释,相信小伙伴们对这个话题应该也很关注吧,现在就为小伙伴们说说服务器端编程语言(专业超文本预处理器的缩写)怎么获取方法的注释,小编也收集到了有关服务器端编程语言(专业超文本预处理器的缩写)怎么获取方法的注释的相关资料,希望大家看到了会喜欢。

服务器端编程语言(专业超文本预处理器的缩写)获取方法的注释:首先打开相应的服务器端编程语言(专业超文本预处理器的缩写)文件;然后通过服务器端编程语言(专业超文本预处理器的缩写)中的反射机制获取该类的文档注释;最后通过获取其所有的方法获取方法的注释即可。

本文操作环境:windows7系统、PHP7.1版戴尔自交第三代电脑

服务器端编程语言(专业超文本预处理器的缩写)反射获取类和方法中的注释

通过服务器端编程语言(专业超文本预处理器的缩写)中的反射机制获取该类的文档注释再通过获取其所有的方法获取方法的注释

所用到的主要类及其方法

ReflectionClass

反射类:getDocComment

反射类:获取方法

$method-getName

$ method-GetDocComment;

$ method-is受保护;

$ method-GetParameters;

$ param-GetName;

$ param-isDefaultValueAvailable;

$param-getDefaultValue测试类如下:

test.php

?服务器端编程语言(专业超文本预处理器的缩写)

标题('内容类型:文本/html;charset=utf-8 ');

需要一次目录(__DIR__).功能。PHP ';

需要一次目录(__DIR__).测试类。PHP ';

$ class _ name=' TestClass

$ reflection=new ReflectionClass($ class _ name);

//通过反射获取类的注释

$ doc=$ reflection-GetDocComment;

//解析类的注释头

$ parase _ result=docparserfactory :3360 getinstance-parse($ doc);

$ class _ metadata=$ parase _ result;

//输出测试

var _ dump($ doc);

回声\ r \ n ';

print _ r($ parase _ result);

回声\ r \ n-\ r \ n ';

//获取类中的方法设置获取受保护的公共类型方法

$ methods=$ reflection-GetMethods(reflection method 3360:是_ PUBLIC reflection method :3360是_ PROTECTED reflection method :是_ PRIVATE);

//遍历所有的方法

foreach($ methods as $ method){ 0

//获取方法的注释

$ doc=$ method-GetDocComment;

//解析注释

$ info=docparserfactory :3360 getinstance-parse($ doc);

$ metadata=$ class _ metadata $ info;

//获取方法的类型

$ method _ flag=$ method-is受到保护;//还可能是受保护的公共类型的

//获取方法的参数

$ params=$ method-GetParameters;

$ position=0;//记录参数的次序

foreach($ params as $ param){ 0

$ arguments[$ param-GetNAmE]=$ position;

//参数是否设置了默认参数如果设置了则获取其默认值

$ defaults[$ position]=$ param-isDefaultValueAvailable?$ param-GetDefaultValue : NULL;

$位置

}

$call=array(

class_name'=$class_name,

method_name'=$method-getName,

参数=$参数,

默认值=$默认值,

metadat

a'=>$metadata, 'method_flag'=>$method_flag ); print_r($call); echo "\r\n-----------------------------------\r\n";}

function.php【推荐学习:《PHP视频教程》】

<?phprequire_once dir(__DIR__).'DocParser.php'; /** * 解析doc * 下面的DocParserFactory是对其的进一步封装每次解析时可以减少初始化DocParser的次数 * * @param $php_doc_comment * @return array */function parse_doc($php_doc_comment) { $p = new DocParser ; return $p->parse ( $php_doc_comment );} /** * Class DocParserFactory 解析doc * * @example * DocParserFactory::getInstance->parse($doc); */class DocParserFactory{ private static $p; private function DocParserFactory{ } public static function getInstance{ if(self::$p == null){ self::$p = new DocParser ; } return self::$p; } }

TestClass.php

<?php/** * A test class [email protected],@param,@return 注释 * 如果要将类的注释和方法的注释合并的话添加了上面的注释会将方法中的注释给覆盖掉 */class TestClass { /** * @desc 获取public方法 * * @url GET pnrs * @param array $request_data * @return int id */ public function getPublicMethod($no_default,$add_time = '0000-00-00') { echo "public"; } /** * @desc 获取private方法 * * @url GET private_test * @return int id */ private function getPrivateMethod($no_default,$time = '0000-00-00') { echo "private"; } /** * @desc 获取protected方法 * * @url GET protected_test * @param $no_defalut,$time * @return int id */ protected function getProtectedMethod($no_default,$time = '0000-00-00') { echo "protected"; }}

DocParser.php 该类源自一个开源项目

<?php/** * Parses the PHPDoc comments for metadata. Inspired by Documentor code base * @category Framework * @package restler * @subpackage helper * @author Murray Picton <[email protected]> * @author R.Arul Kumaran <[email protected]> * @copyright 2010 Luracast * @license http://www.gnu.org/licenses/ GNU General Public License * @link https://github.com/murraypicton/Doqumentor */class DocParser { private $params = array ; function parse($doc = '') { if ($doc == '') { return $this->params; } // Get the comment if (preg_match ( '#^/\*\*(.*)\*/#s', $doc, $comment ) === false) return $this->params; $comment = trim ( $comment [1] ); // Get all the lines and strip the * from the first character if (preg_match_all ( '#^\s*\*(.*)#m', $comment, $lines ) === false) return $this->params; $this->parseLines ( $lines [1] ); return $this->params; } private function parseLines($lines) { foreach ( $lines as $line ) { $parsedLine = $this->parseLine ( $line ); // Parse the line if ($parsedLine === false && ! isset ( $this->params ['description'] )) { if (isset ( $desc )) { // Store the first line in the short description $this->params ['description'] = implode ( PHP_EOL, $desc ); } $desc = array ; } elseif ($parsedLine !== false) { $desc [] = $parsedLine; // Store the line in the long description } } $desc = implode ( ' ', $desc ); if (! empty ( $desc )) $this->params ['long_description'] = $desc; } private function parseLine($line) { // trim the whitespace from the line $line = trim ( $line ); if (empty ( $line )) return false; // Empty line if (strpos ( $line, '@' ) === 0) { if (strpos ( $line, ' ' ) > 0) { // Get the parameter name $param = substr ( $line, 1, strpos ( $line, ' ' ) - 1 ); $value = substr ( $line, strlen ( $param ) + 2 ); // Get the value } else { $param = substr ( $line, 1 ); $value = ''; } // Parse the line and return false if the parameter is valid if ($this->setParam ( $param, $value )) return false; } return $line; } private function setParam($param, $value) { if ($param == 'param' || $param == 'return') $value = $this->formatParamOrReturn ( $value ); if ($param == 'class') list ( $param, $value ) = $this->formatClass ( $value ); if (empty ( $this->params [$param] )) { $this->params [$param] = $value; } else if ($param == 'param') { $arr = array ( $this->params [$param], $value ); $this->params [$param] = $arr; } else { $this->params [$param] = $value + $this->params [$param]; } return true; } private function formatClass($value) { $r = preg_split ( "[\(|\)]", $value ); if (is_array ( $r )) { $param = $r [0]; parse_str ( $r [1], $value ); foreach ( $value as $key => $val ) { $val = explode ( ',', $val ); if (count ( $val ) > 1) $value [$key] = $val; } } else { $param = 'Unknown'; } return array ( $param, $value ); } private function formatParamOrReturn($string) { $pos = strpos ( $string, ' ' ); $type = substr ( $string, 0, $pos ); return '(' . $type . ')' . substr ( $string, $pos + 1 ); }}

以上就是php怎么获取方法的注释的详细内容!

来源:php中文网

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。