In jedem Fall ist es also notwendig, daß der Code übersichtlich ist. Darüber hinaus ist es jedoch unerläßlich, den Quelltext ausführlich zu kommentieren. I.A. ist es hier dem jeweiligen Programmierer überlassen, wie er dies anstellt. Es hat sich allerdings gezeigt, daß eine standardisierte Vorgehensweise beim Kommentieren von Vorteil sein kann: Jeder Programmierer braucht die Syntax dieses Standards nur einmal erlernen und kann ihn dann sowohl selbst anwenden als auch schnell wiedererkennen, wenn es gilt, Quelltexte anderer zu verstehen.
Mit der Programmiersprache Java wurde ein solcher Standard eingeführt und
JavaDoc getauft. Dem JDK liegt ein
gleichnamiges Programm bei, das beliebige Klassen - Java ist eine
durch und durch objektorientierte Sprache - durchparst und die enthaltenen
standardisierten Kommentare so aufbereitet, daß eine
HTML-Übersicht
entsteht, die ebenfalls eine
einheitliche Form aufweist: Die offizielle Java-Dokumentation wird
ebenfalls mit JavaDoc erstellt.
Einige PHP-Programmierer haben diese Idee aufgegriffen und für die Scriptsprache angepaßt.
Dabei herausgekommen ist PHPDOC - eine standardisierte Methode, PHP-Funktionen und
Klassen zu kommentieren. Mit dem PHPDOC-Programm lassen sich
dafür, ganz ähnlich wie mit JavaDoc, HTML-Übersichten erzeugen. Doch auch ohne das
PHPDOC-Programm einzusetzen, wird der Code bei sachgemäßer Anwendung von PHPDOC sehr viel
übersichtlicher. PHPDOC-Pakete finden sich im Internet, wobei zwei Varianten zu unterscheiden
sind:
Jede dieser Lösungen ist leider etwas anders und funktioniert auch unterschiedlich gut. Auf die Unterschiede gehe ich weiter unten noch näher ein.
Doch nun zur Vorgehensweise. Grundsätzlich stehen alle PHPDOC-Kommentare in C-Kommentarzeichen (/* C-Kommentar */); an das einleitende Zeichen wird jedoch in leichter Abwandlung ein zusätzlicher Stern angehängt: /** PHPDOC-Kommentar */
Das folgende, etwas komplexere Beispiel zeigt einen typischen PHPDOC-Kommentar für die ebenfalls exemplarische Funktion foo.
/** * foo: liefert -bar zurück. * * @author Jens Hatlak * @version 1.0 * @param $bar Ein beliebiger Wert * @return Der negative Eingabewert */ function foo($bar) { return -bar; }
Da erst */ den mit /** begonnen Kommentar wieder beendet, kann dazwischen alles andere stehen, auch einzelne Sterne * wie am Anfang jeder Folgezeile; sie dienen der besseren Abgrenzung des Kommentars vom Code. Üblicherweise beginnt der Kommentar dann auch in der zweiten Zeile mit der Beschreibung der Funktion/Klasse/Methode. Der erste Satz wird auch in der Übersich genutzt und der Rest erscheint dann bei der eigentlichen Beschreibung. Diese kann sich über mehrere Zeilen hinziehen und sollte die Funktionalität des zu kommentierenden Folgecodes im Kern dokumentieren.
Nach einer zusätzlichen Leerzeile folgen dann die
einzelnen Angaben zur Codebeschreibung. Hierzu werden Schlüsselworte benutzt, die
grundsätzlich mit einem @ eingeleitet werden und ansonsten aus der Tabelle
13.1 zu ersehen sind.
Schlüsselwort | Bedeutung |
@author | Autor des Codeabschnitts |
@version | Version des Codeabschnitts |
@since | eine Version oder ein Datum |
@access | Zugriffsrechte: private oder public |
@copyright | z.B. Name und Datum |
@see | zu verlinkendes, ebenfalls dokumentierbares Element |
@link | eine weiterführende URL |
@param | Parameter (Wert und Typ, ggf. auch Angabe von optional) der Funktion bzw. Methode in der Reihenfolge der An- bzw. Übergabe |
@return | Typ des Rückgabewerts der Funktion bzw. Methode |
In JavaDoc gibt es übrigens noch die Schlüsselworte @deprecated, @exception und @throws sowie @package und @subpackage, die allerdings in PHPDOC in Ermangelung entsprechender Konstrukte in PHP nicht benötigt werden. Da PHP (zumindest in der aktuellen Version 4.x) keine Zugriffsrechte kennt, macht auch die Verwendung des @access-Schlüsselwortes entsprechend wenig Sinn.
Da die Typisierung in PHP bekanntlich nicht so streng ist wie in Java, führt die in Java implementierte PHPDoc-Variante zwei Zusatz-Schlüsselworte ein, die dies kompensieren sollen -- dies ist übrigens auch der Hauptunterschied zwischen dem phpDocumentor, dessen eigene Syntax die Angabe des Typs direkt im @param-Schlüsselwort erlaubt, und PHP-JavaDoc. Für Klassen-/Instanzvariablen steht hier @type zur Verfügung. Bei Methoden bzw. Funktionen ist v.a. der Typ des Rückgabewerts interessant, weshalb auch @returns zusätzlich zum bereits bekannten @return definiert wurde. Während letzteres ja eine Angabe über den Inhalt des Rückgabewertes machen sollte, ist ersteres ausschließlich für den Typ verantwortlich. Da das Parsen des Codes letztendlich mittels JavaDoc geschieht, sollte man natürlich nicht String verwenden (was zu java.lang.String würde), sondern besser alles klein schreiben, was kein expliziter (selbstdefinierter) Objekttyp ist. In jedem Fall erwartet der JavaDoc-Parser als Rückgabetyp einen einfachen Identifier, so daß hier keine Angaben wie string/boolean für verschiedene Rückgabetyp-Möglichkeiten gemacht werden können.