Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

315
Views
Doxygen y palabra clave "self" en la documentación de PHP

Estoy tratando de documentar mi biblioteca PHP con doxygen, pero no puedo configurarla para que reconozca el uso correcto de la función miembro de mi clase, usando la palabra clave "self". Por ejemplo el siguiente código:

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

no está correctamente documentado. Doxygen asigna las dos funciones, pero cuando se refiere a la llamada interna o externa a estas funciones, no tiene en cuenta el myfunc1 llamado por myfunc2.

Mi solución en este momento es cambiar el código de la siguiente manera:

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

En este caso, doxygen se refiere correctamente al uso de myfunc1 relacionado con myfunc2. Por supuesto que no me gusta mucho esta solución. ¿Cómo puedo solucionar este problema? Muchísimas gracias

about 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Doxygen proporciona la opción de filtro de entrada, que nos permite cambiar el código fuente en el momento de la creación de la documentación. Por ejemplo, nos da la capacidad de interceptar el código y cambiar el código self::myfunc1 a myclass::myfunc1 al vuelo, lo que Doxygen entiende. No cambia el código fuente real de ninguna manera.

Creé un filtro basado en el código de Doxygen PHP Filters con algunas modificaciones, que pueden hacer los cambios por usted.

Cree un archivo /ruta/a/selfFilter.php y coloque el código dentro:

 <?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;

Actualice las siguientes opciones en su archivo de configuración de doxygen.

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

Asegúrese de que /path/to/selfFilter.php sea ejecutable y que php esté disponible en la ruta; de lo contrario, use la ruta completa de php

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

Si ejecuta el Doxygen ahora, debería funcionar. Por favor, hágamelo saber si tiene algún problema.

Nota: La palabra clave 'clase' debe definirse en minúsculas para que funcionen los filtros anteriores.

about 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!