文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

php获取方法的注释

2023-06-08 01:40

关注

小编给大家分享一下php获取方法的注释,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

php获取方法的注释:首先打开相应的PHP文件;然后通过php中的反射机制,获取该类的文档注释;最后通过获取其所有的方法,获取方法的注释即可。

php反射获取类和方法中的注释

通过php中的反射机制,获取该类的文档注释,再通过获取其所有的方法,获取方法的注释

所用到的主要类及其方法

ReflectionClassReflectionClass::getDocCommentReflectionClass::getMethods $method->getName()$method->getDocComment();$method->isProtected();$method->getParameters(); $param->getName();$param->isDefaultValueAvailable();$param->getDefaultValue()

测试类如下:

test.php

<?phpheader("Content-type: text/html; charset=utf-8");require_once dir(__DIR__).'function.php';require_once dir(__DIR__).'TestClass.php'; $class_name = 'TestClass'; $reflection = new ReflectionClass ( $class_name );//通过反射获取类的注释$doc = $reflection->getDocComment ();//解析类的注释头$parase_result =  DocParserFactory::getInstance()->parse ( $doc );$class_metadata = $parase_result; //输出测试var_dump ( $doc );echo "\r\n";print_r( $parase_result );echo "\r\n-----------------------------------\r\n"; //获取类中的方法,设置获取public,protected类型方法$methods = $reflection->getMethods(ReflectionMethod::IS_PUBLIC + ReflectionMethod::IS_PROTECTED + ReflectionMethod::IS_PRIVATE);//遍历所有的方法foreach ($methods as $method) {    //获取方法的注释    $doc = $method->getDocComment();    //解析注释    $info = DocParserFactory::getInstance()->parse($doc);    $metadata = $class_metadata +  $info;    //获取方法的类型    $method_flag = $method->isProtected();//还可能是public,protected类型的    //获取方法的参数    $params = $method->getParameters();    $position=0;    //记录参数的次序    foreach ($params as $param){        $arguments[$param->getName()] = $position;        //参数是否设置了默认参数,如果设置了,则获取其默认值        $defaults[$position] = $param->isDefaultValueAvailable() ? $param->getDefaultValue() : NULL;        $position++;    }     $call = array(        'class_name'=>$class_name,        'method_name'=>$method->getName(),        'arguments'=>$arguments,        'defaults'=>$defaults,        'metadata'=>$metadata,        'method_flag'=>$method_flag    );    print_r($call);    echo "\r\n-----------------------------------\r\n";}

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

<?phprequire_once dir(__DIR__).'DocParser.php'; function parse_doc($php_doc_comment) {    $p = new DocParser ();    return $p->parse ( $php_doc_comment );} 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

<?phpclass TestClass {        public function getPublicMethod($no_default,$add_time = '0000-00-00') {        echo "public";    }        private function getPrivateMethod($no_default,$time = '0000-00-00') {        echo "private";    }         protected function getProtectedMethod($no_default,$time = '0000-00-00') {        echo "protected";    }}

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

<?phpclass 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获取方法的注释”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯