Doxygen и «self» ключевое слово в документации PHP

Я пытаюсь документировать мою библиотеку PHP с помощью doxygen, но я не могу настроить ее так, чтобы она распознавала правильное использование функции-члена моего класса, используя ключевое слово «self». Например, следующий код:

Class myclass{
public static function myfunc1(){
return 10; }
public static function myfunc2(){
return self::myfunc1(); }
}

не правильно задокументировано. Doxygen отображает две функции, но когда он ссылается на внутренний или внешний вызов этих функций, он не учитывает myfunc1, вызванный myfunc2.

Мой обходной путь на данный момент заключается в изменении кода следующим образом:

Class myclass{
public static function myfunc1(){
return 10; }
public static function myfunc2(){
return myclass::myfunc1(); }
}

В этом случае doxygen правильно относится к использованию myfunc1, связанному с myfunc2. Конечно, мне не очень нравится это решение. Как я могу решить эту проблему?
большое спасибо вам

3

Решение

Doxygen предоставляет опцию входного фильтра, которая позволяет нам изменять исходный код во время создания документации. Например, Это дает нам возможность перехватить код и изменить код self::myfunc1 в myclass::myfunc1 на лету, что понимает Doxygen. Это никак не меняет фактический исходный код.

Я создал фильтр на основе кода из Doxygen PHP фильтры с некоторыми изменениями, которые могут сделать изменения для вас.

Пожалуйста, создайте файл /path/to/selfFilter.php и поместите в него код:

<?php
//Create file /path/to/selfFilter.php

$source = file_get_contents($argv[1]);
$tokens = token_get_all($source);
$classes = array();
foreach($tokens as $key => $token)
{
if($token[0] == T_CLASS)
$classes[] = $tokens[$key+2][1];
}
if(!empty($classes))
{
list($source, $tail) = explode('class ' . $classes[0], $source, 2);
$class_code = '';
for($i = 1; $i < count($classes); $i++)
{
list($class_code, $tail) = explode('class ' . $classes[$i], $tail, 2);
$class_code = preg_replace('#\bself::#', $classes[$i-1].'::', $class_code);
$source .= 'class ' . $classes[$i-1] . $class_code;
}
$class_code = preg_replace('#\bself::#', $classes[count($classes)-1].'::', $tail);
$source .= 'class ' . $classes[count($classes)-1] . $class_code;

}

echo $source;

Обновите следующие параметры в вашем конфигурационном файле doxygen.

INPUT_FILTER           = "php /path/to/selfFilter.php"FILTER_PATTERNS        =
FILTER_SOURCE_FILES    = YES
FILTER_SOURCE_PATTERNS =

Пожалуйста, убедитесь, что /path/to/selfFilter.php исполняемый файл и php доступен по пути, в противном случае используйте полный путь php

INPUT_FILTER           = /usr/bin/php /path/to/selfFilter.php

Если вы запустите Doxygen сейчас, он должен работать. Пожалуйста, дайте мне знать, если у вас есть какие-либо проблемы.

Примечание: ключевое слово «класс» должно быть определено в нижнем регистре для работы вышеуказанных фильтров.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector