Heim  >  Artikel  >  Backend-Entwicklung  >  So erhalten Sie Methodenkommentare in PHP

So erhalten Sie Methodenkommentare in PHP

藏色散人
藏色散人Original
2021-03-11 10:05:353477Durchsuche

php Holen Sie sich die Kommentare der Methode: Öffnen Sie zuerst die entsprechende PHP-Datei, rufen Sie dann die Dokumentationskommentare der Klasse über den Reflexionsmechanismus in PHP ab und rufen Sie schließlich alle ihre Methoden ab.

So erhalten Sie Methodenkommentare in PHP

Die Betriebsumgebung dieses Artikels: Windows 7-System, PHP-Version 7.1, DELL G3-Computer

PHP-Reflexion erhält Kommentare in Klassen und Methoden

Über den Reflexionsmechanismus in PHP erhalten Sie die Dokumentationskommentare von Rufen Sie dann alle ihre Methoden und die Methodenkommentare ab.

Die wichtigsten verwendeten Klassen und Methoden Tutorial

》】

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

TestClass.php

<?php
header("Content-type: text/html; charset=utf-8");
require_once dir(__DIR__).&#39;function.php&#39;;
require_once dir(__DIR__).&#39;TestClass.php&#39;;
 
$class_name = &#39;TestClass&#39;;
 
$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(
        &#39;class_name&#39;=>$class_name,
        &#39;method_name&#39;=>$method->getName(),
        &#39;arguments&#39;=>$arguments,
        &#39;defaults&#39;=>$defaults,
        &#39;metadata&#39;=>$metadata,
        &#39;method_flag&#39;=>$method_flag
    );
    print_r($call);
    echo "\r\n-----------------------------------\r\n";
}

DocParser.php Diese Klasse stammt aus einem Open-Source-Projekt

<?php
require_once dir(__DIR__).&#39;DocParser.php&#39;;
 
/**
 * 解析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;
    }
 
}

Das obige ist der detaillierte Inhalt vonSo erhalten Sie Methodenkommentare in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn