RobRobson: Einfachster Weg alle Funktionen eines Projektes zu erhalten

Hallo,

habe etliche Scripte eines Projektes in einem Ordner,
möchte jetzt eine Liste daraus mit allen Funktionen (php, css)
generien (plain/text).

Was geht schneller als alles per hand aus zu kopieren? :)

Viele Grüße,
Rob

  1. Lieber RobRobson,

    was nützt Dir das Wissen um den Funktionsnamen, wenn Du nicht sicher sein kannst, dass die Funktion auch verfügbar ist (z.B. weil sie per include durch ein Script definiert wurde)?

    Was geht schneller als alles per hand aus zu kopieren? :)

    Du kannst Dir ein Script schreiben, das alle PHP-Dateien in einen String einliest um ihn dann mittels preg_match_all() und einem passenden Suchmuster zu durchsuchen.

    Liebe Grüße,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)
    1. Hallo Felix

      Danke für Deine Antwort.

      was nützt Dir das Wissen um den Funktionsnamen, wenn Du nicht sicher sein kannst, dass die Funktion auch verfügbar ist (z.B. weil sie per include durch ein Script definiert wurde)?

      Reine Dokumentationszwecke.

      Was geht schneller als alles per hand aus zu kopieren? :)

      Du kannst Dir ein Script schreiben, das alle PHP-Dateien in einen String einliest um ihn dann mittels preg_match_all() und einem passenden Suchmuster zu durchsuchen.

      Ja das kann ich, aber diese wertvollen Minuten hab ich am heutigen Tage nicht ;)

      Liebe Grüße,

      Felix Riesterer.

      Viele Grüße,
      Rob

      1. Lieber RobRobson,

        Du kannst Dir ein Script schreiben, das alle PHP-Dateien in einen String einliest um ihn dann mittels preg_match_all() und einem passenden Suchmuster zu durchsuchen.

        Ja das kann ich, aber diese wertvollen Minuten hab ich am heutigen Tage nicht ;)

        dann viel Spaß mit Copy&Paste! Das kann je nach Projekt wesentlich länger dauern. Und in der Zeit, in der wir hier im Forum posten, hättest Du diesen Fünfzeiler längst geschrieben!

        Liebe Grüße,

        Felix Riesterer.

        --
        ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)
        1. Lieber RobRobson,

          dann viel Spaß mit Copy&Paste! Das kann je nach Projekt wesentlich länger dauern. Und in der Zeit, in der wir hier im Forum posten, hättest Du diesen Fünfzeiler längst geschrieben!

          Wenn mans richtig drauf hat, dann ja. ;)
          Bei mir hats länger gedauert. Hatte mehrere Rekursionsfunktionen verglichen.
          Iss ne Holzmethode geworden, aber funktioniert. Kann man auf jeden Fall weiter entwickeln.

            
          class DirectoryParser  
          {  
          	public static function dirRead($dir, &$fileinfo = array())  
          	{  
                  if ($handle = dir($dir)) {  
                      while (false !== ($file = $handle->read())) {  
                          if (!is_dir($dir.'/'.$file))  
          				{  
          					if($files = self::parse_file($dir.'/'.$file)) echo "<br><h3> $dir.'/'.$file </h3>" . $files ;  
                          }  
          				elseif (is_dir($dir.'/'.$file) && $file != '.' && $file != '..')  
          				{  
                              self::dirRead($dir.'/'.$file, $fileinfo);  
                          }  
                      }  
                      $handle->close();  
                  }  
              }  
          	  
          	public static function parse_file($file)  
          	{  
          		$out = '';  
          		$zeilen = file($file);  
          		foreach( $zeilen AS $zeile)  
          		{  
          			$zeile = trim($zeile);			  
          			if(substr($zeile,0,9) == 'function ' AND substr_count($zeile,'(') == 1 AND   substr_count($zeile,')') == 1 )	  
          			{  
          				#$files[] = $zeile;  
          				$out .= '<br>'.$zeile;  
          			}  
          		}  
          	return $out;		  
          	}  
          }  
          
          

          Danke auch an dedlfix und Peter Pan, Doku mach ich ja immer sehr viel. Aber eben nur in den files und noch keine strukturelle. Das wird jetzt aber der Anfang.

          Liebe Grüße,

          Felix Riesterer.

          Danke und Viele Grüße,
          Rob

      2. Hi!

        was nützt Dir das Wissen um den Funktionsnamen, wenn Du nicht sicher sein kannst, dass die Funktion auch verfügbar ist (z.B. weil sie per include durch ein Script definiert wurde)?
        Reine Dokumentationszwecke.

        Das geht schöner, wenn gleich zu Anfang damit begonnen und es konsequent durchgehalten wird, PHPDoc-Kommentare hinzuzufügen. Unter diesem Stichwort findest du Beschreibungen der Syntax und auch Tools, die aus diesen Kommentaren eine ordentliche Dokumentation erzeugen. Zudem ist das ein verbreitetes Format, so dass auch einige Entwicklungsumgebungen sowohl beim Arbeiten aufgrund dieser Kommentare nützliche Hinweise einblenden können also auch beim Erstellen der Kommentare behilflich sind.

        Was geht schneller als alles per hand aus zu kopieren? :)

        Einen Parser schreiben. Dabei nimmt dir der Tokenizer schon eine ganze Menge Arbeit ab.

        Lo!

        1. Hi!

          Einen Parser schreiben. Dabei nimmt dir der Tokenizer schon eine ganze Menge Arbeit ab.

          Oder Doxygen benutzen?

          off:PP

          --
          "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
          1. Hi!

            Einen Parser schreiben. Dabei nimmt dir der Tokenizer schon eine ganze Menge Arbeit ab.
            Oder Doxygen benutzen?

            Wenn das auch undokumentierten Code dokumentieren kann, dann natürlich auch solche Hilfsmittel.

            Lo!

            1. Hi!

              Einen Parser schreiben. Dabei nimmt dir der Tokenizer schon eine ganze Menge Arbeit ab.
              Oder Doxygen benutzen?

              Wenn das auch undokumentierten Code dokumentieren kann, dann natürlich auch solche Hilfsmittel.

              Ja macht es, sogar recht passabel.

              off:PP

              --
              "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
    2. Moin!

      Du kannst Dir ein Script schreiben, das alle PHP-Dateien in einen String einliest um ihn dann mittels preg_match_all() und einem passenden Suchmuster zu durchsuchen.

      Das ist aber bei PHP-Quelltext nicht sehr schön. Vor allem, wenn der Quelltext in tausendundeiner Variante durch verschiedene Programmierer realisiert wurde.

      PHP bietet einen netten Tokenizer, der sich für solche Zwecke 1a anwenden lässt. Man erhält da ein Array mit allen PHP-Token, die erkannt wurden, und insbesondere die Keywords wie function, class etc. sind schon eindeutig identifizierbar durch Konstanten, wie T_FUNCTION oder T_CLASS.

      Die Funktion token_get_all() hat sogar ein nettes Beispiel parat.

      Und so ein Array durchzugehen ist viel leichter, als reguläre Ausdrücke anzuwenden. Hab ich selbst schon getan, um alle in einer Datei enthaltenen Klassennamen herauszufinden - war vielleicht 2 Stunden Arbeit, bis es schön war.

      - Sven Rautenberg

  2. Moin,

    habe etliche Scripte eines Projektes in einem Ordner,
    möchte jetzt eine Liste daraus mit allen Funktionen (php, css)
    generien (plain/text).

    Wildwuchs???

    Was geht schneller als alles per hand aus zu kopieren? :)

    Tja, mein Lieber, das wird Zeit, dass Du mal aufräumst ;)

    Entweder von Hand oder per Script, auf beiden Wegen kriegst Du die Ordnung wieder rein. Habe ich auch mal machen müssen, per Script in alle Dateien reingucken und eine Liste erstellen, welche Module (Perl, use, require) von welchen Scripts/Modul (Dependencies) verwendet werden.

    -> wahrscheinlich gehts schneller, ein Script für zu schreiben.

    Hotti

    PS: Muss auch mal wieder aufräumen ;)

  3. Hey Rob,

    habe etliche Scripte eines Projektes in einem Ordner,
    möchte jetzt eine Liste daraus mit allen Funktionen (php, css)
    generien (plain/text).

    Was geht schneller als alles per hand aus zu kopieren? :)

    ich weiß nicht genau ob Du damit was anfangen kannst, aber der phpDocumentor und ähnliche Programme haben sich für sowas bewährt.

    Du hast zwar (wahrscheinlich) keine DocBlock-Informationen in Deinen Dateien; soweit ich mich erinnere kann der Documentor Dir aber trotzdem eine recht ordentliche Dokumentation / Auflistung erstellen. Halt ohne alle Möglichkeiten auszuschöpfen.

    Wenn Du dann demnächst Deine Skripte aufräumst, könntest Du sie auch direkt um die Doc-Blöcke erweitern.

    Gruß, Dennis