IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Expression regulière de recherche de nom de fonctions et de classes (dans un code php)


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 6
    Points : 7
    Points
    7
    Par défaut Expression regulière de recherche de nom de fonctions et de classes (dans un code php)
    Salut à tous.

    Après plusieurs heures de tâtonnements et de recherches, je me résigne a publier ma question sur un forum.

    voilà, je vous expose ce que je veux faire et ce que j'ai fait.

    je veux pouvoir lire un fichier php et en faire la liste des fonctions et de classe.

    dans un premier temps j'ai fait une recherche sur les fonctions avec l'expression suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /function\s{1,}([0-9A-Za-z_\-]+)\s{0,}\(/
    elle fonctionne très bien.

    toutefois, la déclarations de méthodes dans un classe se crée de la même manière ce qui fait que je ne sais pas si ma fonction appartient a une classe ou non, et c'est très important de le savoir.

    je suis donc parti sur l'idée suivante :
    1. Rechercher les classes
    2. Garder le nom des classes
    3. Effacer le code des classes
    4. Recupérer la liste des fonctions qui ne sont pas dans une classe


    Donc j'ai réussi à aboutir à l'expression suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /class\s*([0-9A-Za-z_\-]*)\s*(?:extends\s*[0-9A-Za-z_\-]*)?\s*/
    qui me retourne la liste des classes:
    maintenant il me fallait aussi recupérer ce qu'il y a entre "{" et "}" pour pouvoir l'effacer et ne pas affecter la suite de la recherche.

    j'ai donc le code suivant pour trouver les accolades
    maintenant, mon problème, c'est que je dois joindre ces deux expressions pour pouvoir matcher les accolades quand elles appartiennent a une classe

    ce qui donnerait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /class\s*([0-9A-Za-z_\-]*)\s*(?:extends\s*[0-9A-Za-z_\-]*)?\s*\{([^{}]+|(?R))*\}/
    le problème c'est que preg_match_all ne retourne absolument rien.

    pourtant, si on enlève juste "class" de la recherche, elle fonctionne a nouveau.

    mais si on utilise comme chaine de test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    class na_m-e {
    	$blabla = \'\';
     
    	function name(){
     		if($id2=="24"){
     
    		}
    	}
     
    }
     
    class na_m-e2 extends the_OtherCla-ss24{
    	$blabla = \'\';
     
    	function name(){
     		if($id == 2){
    		}
    	}
     
    }
    if(){
    	function name(){
     
    	}
    }
    Dans le cas du pattern simplifié, ca matche aussi la fonction "name" entre les accolades du "if()"

    si quelqu'un a une solution a mon problème ou une idée alternative, je suis preneur

  2. #2
    Membre éclairé
    Avatar de hornetbzz
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Octobre 2009
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Octobre 2009
    Messages : 482
    Points : 773
    Points
    773
    Par défaut
    EUh, pourquoi ré inventer la roue .. ?

    fonctions

    classes

  3. #3
    Futur Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 6
    Points : 7
    Points
    7
    Par défaut eh bien ... tout simplement parce que
    en fait, mon script n'incluera pas ces scripts dans le sien.

    Concrètement, j'ai un plugin wordpress. qui fait du single sign on avec phpbb.

    Donc les deux scripts sont inclus l'un dans l'autre.
    Mais des fois ca ne fonctionne pas car un plugin wordpress contient les mêmes fonctions que phpbb. (par exemple le plugin WP-Smtp)

    et au lieu de rechercher a tâtonnement et faire une liste constamment incomplète des plugins non compatibles avec le mien. je veux automatiser la tâche.

    je ne peux donc pas faire un include du fichier si il va faire planter le script.
    je veux fournir un outil qui va lister toutes les fonctions de phpbb.
    pour ensuite lister toutes celles de wordpress. et regarder si il y a des conflits.

    Mais mea culpa, je n'ai pas justifié pourquoi je voulais absolument effectuer cela comme ca.

  4. #4
    Membre éclairé
    Avatar de hornetbzz
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Octobre 2009
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Octobre 2009
    Messages : 482
    Points : 773
    Points
    773
    Par défaut
    Ok c'était pas clair.

    Alors à ce moment, à vrai dire, je ferai ça directement sous linux qui me parait plus adapté pour atteindre cet objectif, tout en restant extérieur aux scripts php que tu veux comparer.

    Et avec l'avantage que ça serait un petit module que tu pourrais réutiliser indépendamment de tes scripts. Je n'en connais pas de "tout fait", mais ça existe surement ou alors tu peux écrire un truc simpliste assez facilement si tu connais le shell.

    Ceci dit, c'est probablement possible en php aussi, en ajoutant ta petite fonction de recherche de fonctions et classes en début des scripts inclus l'un dans l'autre, et tu sors avec un exit si tu détectes un doublon par exemple.

  5. #5
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par hornetbzz Voir le message
    Et avec l'avantage que ça serait un petit module que tu pourrais réutiliser indépendamment de tes scripts. Je n'en connais pas de "tout fait", mais ça existe surement ou alors tu peux écrire un truc simpliste assez facilement si tu connais le shell.
    Plutôt que le bash, j'opterais pour Perl pour un tel travail.

  6. #6
    Futur Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    Eh bien je veux pas vous déprimer, mais cette solution ne va pas non plus.

    Il ne faut pas perdre de vue que ce script sera utilisé par 200 à 300 personnes, chacun sur un serveur différent.

    Et la seule certitude que l'on a c'est qu'ils ont php. puisque ce sera integré dans wordpress.
    mais là encore on ne sait pas la version.

    Alors même si la solution du shell script est intéressante, ou script python/perl/ruby. elle n'est simplement pas applicable pour tout utilisateur utilisant un serveur partagé.

    Je cherche donc une solution uniquement php.
    qui fonctionne avec ou sans expression regulière.
    et qui ne demande pas de faire un include du fichier.

Discussions similaires

  1. [PHP 5.3] retourne le resultat d'une fonction javascript dans un code php
    Par abir001 dans le forum Langage
    Réponses: 4
    Dernier message: 13/04/2010, 14h36
  2. Réponses: 1
    Dernier message: 25/10/2007, 18h04
  3. Appeler une fonction dans un code PHP
    Par Nasky dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 07/08/2007, 16h19
  4. Réponses: 4
    Dernier message: 30/05/2007, 18h05
  5. Réponses: 4
    Dernier message: 10/02/2005, 16h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo