Hallo,
Ich möchte an dieser Stelle meine "PHP Inspection Unit" vorstellen.
Sie ist entstanden, als ich mich etwas mit regulären Ausdrücken auseinandergesetzt habe.
Mit ihr ist es möglich eine PHP Datei zu analysieren. Dabei werden Klassen mit deren Methoden und Variablen aufgelistet, sowie Methoden ohne Klassenbezug und eingebundene Dateien (über include, require, etc.) - Eine komplette Featureliste gibt es weiter unten.
Das ganze wird hierarchisch in einer Klassenstruktur zusammengefasst. Die für Benutzer relevante Klasse sollte die Klasse
TPHPSource in der Unit
uPHPInspector.pas sein. Ihr wird beim Konstruktor der PHP Quelltext übergeben und daraus werden die Klassen etc. herausgeparsed. Die anderen Klassen in der Unit sollten nicht direkt instanziert werden.
Die Verwendung der Eigenschaften der einzelnen Klassen sollte relativ einfach sein. Bei Rückfragen, bitte hier in den Thread schreiben.
Zum Parsen verwende ich, wie gesagt, reguläre Ausdrücke. Da die native Delphi Bibliothek
TREGEXPR in einem für mich wichtigem Punkt nicht ganz vollständig war, bin ich auf die Wrapperklasse von
www.renatomancuso.com umgestiegen. Der einzige Nachteile daraus ist der größere overhead, da Anwendungen die PCRE.dll mitliefern müssen, die mit knapp 200 KB zu Buche schlägt.
Es lässt sich auch eine Syntaxprüfung durchführen. Dazu muss man die Funktion
SyntaxCheck der Klasse
TPHPSource aufrufen. Dabei kann man zwischen reiner Syntaxprüfung und einer vollständigen Ausführung der Datei wählen. Bei der Syntaxprüfung werden nur rein syntaktische Fehler erkannt. Nicht vorhandene Include-Dateien oder undefinierte Funktionen werden nicht erkannt. Dazu muss der erste Parameter auf TRUE gesetzt werden.
Im Zweiten Parameter "FileName" kann noch eine Datei zur Syntaxprüfung übergeben werden (Die Datei wird nicht automatisch von TPHPSource geparsed!)
Wichtig beim Testen eurer Sources ist, dass ihr die <? und ?> nicht vergessen dürft, da die Syntaxprüfung ansonsten immer = TRUE ergibt (der Text wird dann einfach ausgegeben ohne geparsed zu werden). Zudem wird euer Source dann nicht vom PHP Inspector geparsed, wenn die PHP-Tags (<? .. ?>) fehlen. Das Verhalten kann durch die
StrictPHPTagCheck Eigenschaft beeinflusst werden.
Eine Liste aller Features:
- Schnelles parsen von PHP4, PHP5 und gemischten (HTML und PHP z.B.) Dateien
- Aufzählen von Klassen im Quelltext mitsamt alles Methoden und Variablen. Bei den Methoden wird angegeben, ob die statisch, final oder abstrakt sind. Es gibt auch eine vollständige Parameterliste. Dann gibt es dort noch die Möglichkeit sich den kompletten Funktionskopf bzw. -körper zurückgeben zu lassen, sowie den Anfang und das Ende der Brackets {}. Ahja, und die Sichtbarkeit wird auch angegeben (private, protected, public). Bei Variablen kann man neben den Namen und der Sichtbarkeit den Wert herausfinden, mit dem die Variable ggf. initialisiert wurde. Auch werden Klassenkonstanten aufgelistet, die die Eigenschaften für den Namen und den Wert haben. Des weiteren kann man abfragen, welches Interface von der Klasse implementiert ist bzw. von welcher Klasse die Klasse abgeleitet ist.
- Aufzählung aller per include, include_once, require und require_once eingebundenen Dateien (+ Namen der Datei)
- Aufzählung für globale Konstanten (defines)
- Auflistung aller Funktionen, die nicht zu einer Klasse gehören. Der Funktionsumfang ist der selbe, wie bei den Funktionen einer Klasse, jedoch gibt es hier keine Angabe, ob diese final etc. sind.
- Auch gibt es eine Auflistung aller Interfaces samt ihrer Methoden (und den zugehörigen Eigenschaften)
- Man kann abfragen, was für ein PHP-Element sich an welcher Position im Text befindet.
- Möglichkeit eines Syntax- bzw. Errorchecks mit der PHP.exe
- Umschaltung auf PHP4-Only Mode möglich. Das gibt einen großen Geschwindigkeitsschub, jedoch werden dann keinerlei PHP5 Konstrukte mehr erkannt.
Zum Download gibt es nun:
PHPInspector.zip (125 KB) - Der "PHP Inspector" in der Version 2.3 (PCRE.dll und Wrapper Units included; aktuelle Version vom 26. Oktober 2004)
sample_application.zip (350 KB) - Eine Beispielanwendung, samt Source.
php_source_analyzer.jpg (100 KB) - Ein Screenshot der Beispielanwendung.
Freue mich auf euer Feedback
mfG
mirage228