Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

321
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda