Par Nicolas SUPRIN, vendredi 20 avril 2007 à 12:55 | PHP | #98 | rss
Voici une bidouille pour retrouver l'endroit où est définie une fonction.
Mise en situation
Il arrive parfois qu'on peine à retrouver l'endroit où à été définie une fonction (moultitude de required, manque de clareté du code, défaillance de l'inspecteur Zend...).
J'ai donc pondu vite fait cette fonction, qui ne demande qu'à être optimisée.
Le code
function find_function($S_functionName) { $A_return = array(); // si la fonction existe pas, on lache l'affaire if (!function_exists($S_functionName)) { $A_return[] = 'function '.$S_functionName.' does not exists'; } else { // recupere la liste des fichiers inclus (ou required) $A_includedFiles = get_included_files(); // on parcours cette liste foreach ($A_includedFiles as $S_file) { // si on ne peut pas acceder au fichier, on lache l'affaire if (!is_readable($S_file)) { break; } // on récupère le contenu du fichier ligne par ligne $A_fileContent = file($S_file); foreach ($A_fileContent as $I_line => $S_line) { // si on trouve la fonction, on l'enregistre if (preg_match('/function[[:space:]]*'.$S_functionName.'[[:space:]]*\(/', $S_line)) { $A_return[] = $S_file.':'.($I_line + 1); } } } } return $A_return; }
Utilisation
- Copiez cette fonction dans votre appli, de façon à ce qu'elle soit inclue automatiquement (dans le globalConf, par exemple).
- à l'endroit où vous utilisez la fonction "inconnue", appelez
find_function('ma_function');(pour être sûr d'être dans le bon contexte). - Elle renvoi un tableau contenant les nom des fichier, et les ligne où la définition de la fonction à été trouvée.
Exemple
Avec la fonction print_rn :
ma_function(); print_rn(find_function('ma_function'));
Qui retournera :
array(1) {
[0]=>
string(39) "/home/toto/www/inc/tata.inc.php:490"
}
Conclusion
Voilà , pour un premier jet, c'est pas mal.
Par contre je n'ai tester qu'avec des "fonctions" bêtes et méchantes, et pas avec des méthodes de classe.
Théoriquement, ça doit également marcher, n'indiquant que le nom de la méthode :
$O_objet->maMethode(); print_rn(find_function('maMethode'));





Aucun commentaire pour le moment.
Aucun trackback.
Pour faire un trackback sur ce billet : http://www.blog.cactuscrew.com/tb.php?id=98&chk=j1yc91