Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [REGEX]Match nomi di metodi all'interno di file PHP se non sono dichiarazioni

    Ciao a tutti,
    avrei bisogno di una mano con le espressioni regolari.
    Ho uno script che date una o più classi estrae i nomi dei vari metodi che contengono, e questo funziona.
    Dati i nomi poi devo controllare se queste funzioni vengono utilizzate in un'app. Quindi devo sostanzialmente ciclare i vari files, leggerli (e qui ci siamo) e matchare i nomi dei vari metodi al loro interno.

    I 3 casi in cui si possono presentare i nomi dei metodi sono:
    1. dichiarazione: function Nome () {
    2. commento: /* Method : Nome
    3. utilizzo: $class->Nome ();

    Vorrei fare in modo che il match escluda i primi due casi e consideri quindi sono i casi di utilizzo dei metodi (se è solo dichiarato o commentato lo segnalo come "non in uso").

    Se po fa?

    Grazie in anticipo ^^

  2. #2
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Basta che al posto di cercare per il nome del metodo cerchi per la sua applicazione:
    ->NomeMetodo ();
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  3. #3
    Ciao,
    prima di tutto grazie della risposta
    Quella era la soluzione "di riserva", se era fattibile preferivo farlo con un'espressione che facesse quello che descrivevo nel post di apertura. Anche perchè è possibile che in futuro alcuni metodi siano richiamati con "parent:: Nome();" e a quel punto "->Nome" non andrebbe più bene.
    Potrei aggiungere ":: Nome" all'espressione ma comunque se c'era un modo per farlo da subito preferivo, sia perchè è più generale, sia perchè non si sa mai che sia un tipo di espressione che mi può tornare utile in altre occasioni.
    Per ora sto usando comunque quello che suggerivi e ovviamente funziona ^^

  4. #4
    Utente bannato
    Registrato dal
    Apr 2012
    Messaggi
    510
    Per escludere i primi due casi, mentre fai il parsing cioè scandisci tutti i caratteri, basta utilizzare un booleano che setti a true ogni volta che incontri due caratteri "/*", e setti a false ogni volta che incontri due caratteri "*/".Lo puoi settare a true anche se incontri due caratteri "//" e in questo caso lo setti a false quando si va a capo riga.Se questo booleano è uguale a true il nome non viene considerato.
    Cosi' hai eliminato il primo caso.
    Per eliminare il secondo caso basta verificare che il nome della funzione sia seguito da un punto e virgola anzichè da una graffa.

  5. #5
    Ciao,
    grazie anche a te della risposta.
    Non c'è una fase di parsing, utilizzo preg_match_all quindi non scorro la stringa per caratteri (sempre che io abbia inteso bene la tua frase).
    Per invece la seconda parte se alcuni metodi ritornano un dato già formattato spesso sono utilizzate direttamente in espressioni o nell'output (ad esempio if ( !empty ( $class->Nome () ) )) quindi non c'è sempre il ; finale. Anche qui si potrebbe risolvere assegnando il valore ad una variabile e poi usando quella ma non è il massimo.

  6. #6
    Utente bannato
    Registrato dal
    Apr 2012
    Messaggi
    510
    A questo punto ti conviene fare come ha detto Scara95, aggiungendo il caso nomeclasse.metodo() .
    Se mai dopo le cose dovessero cambiare potrai aggiungere un pattern nomeclasse::metodo() .

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.