Come ottenere i commenti delle funzioni di classe PHP?
-
27-10-2019 - |
Domanda
Devo ottenere un commento della funzione particolare nella classe PHP, ad esempio:
/* Some commets for a class */
class Foo extends Bar {
function __construct() {}
// a single line comment to the function foo()
function foo() {}
/* a multi-line comment
to the function bar() */
public static function bar() {}
}
Sì, lo so, potrebbe essere facilmente fatto con ReflectionMethod-> getDoccomment (), ma non funziona per me perché uso Eaccuterator e taglia tutti i commenti dal codice, in modo che getDoccomment restituisca sempre falso.
Non voglio ricompilare anche Eaccielerator :)
Ho bisogno di una funzione come questa:
function get_function_comment($class_contents, $function_name) {}
In modo che restituirò il commento di una funzione, $ class_contents è una variabile che memorizza il contenuto di classe come nell'esempio sopra.
Ho provato a farlo da solo ma non posso creare un regexp adeguato ..
Mi aiuti per favore :)
Soluzione
Prova a utilizzare i commenti PHPDOC corretti:
/**
* Something explaining this
*
* @return string
*/
function foo(){ }
Altri suggerimenti
Oh amico, mi sento quasi sporco per aver scritto questo regex, ma questo potrebbe fare il trucco (non l'ho testato, quindi non credermi).
preg_match('#(//.*$|/\*.*\*/)\s*$[\s\w]*function\s+$function_name\b#Usmi', $class_contents, $result);
In teoria, funziona come:
- Trova entrambi:
- // e tutto fino alla fine di quella linea o
- / *, allora tutto fino a un */
- Quindi mangia tutto lo spazio bianco fino alla fine della linea
- Prendi qualsiasi quantità di caratteri di spazi bianchi o di parole nella riga successiva fino a quando non si preme "funzione", un po 'di spazio bianco, quindi l'intero nome della funzione che desideri.
In pratica: "Alcune persone, di fronte a un problema, pensano" Lo so, userò espressioni regolari. "Ora hanno due problemi".