<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>/home/antu &#187; Programmierung</title>
	<atom:link href="http://www.antusblog.de/tag/programmierung/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.antusblog.de</link>
	<description>Linux, Programmierung und andere Dinge die mich interessieren</description>
	<lastBuildDate>Mon, 26 Oct 2009 06:00:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Quelltexte dokumentieren mit PhpDocumentor</title>
		<link>http://www.antusblog.de/2009/06/02/php-quelltexte-dokumentieren-mit-phpdocumentor/</link>
		<comments>http://www.antusblog.de/2009/06/02/php-quelltexte-dokumentieren-mit-phpdocumentor/#comments</comments>
		<pubDate>Tue, 02 Jun 2009 19:58:15 +0000</pubDate>
		<dc:creator>Antu</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[DocBlock]]></category>
		<category><![CDATA[Dokumentation]]></category>
		<category><![CDATA[PhpDocumentor]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Quelltext]]></category>
		<category><![CDATA[Verständlichkeit]]></category>
		<category><![CDATA[Wiederverwendbarkeit]]></category>

		<guid isPermaLink="false">http://www.antusblog.de/?p=1424</guid>
		<description><![CDATA[Bei umfangreicheren PHP-Projekten ist es wichtig, das der Quelltext gut dokumentiert ist. So weiß man auch später noch, welche Funktion oder Klasse wofür zuständig ist, und wo man was findet. Wenn man im Team arbeitet oder andere Personen den Quelltext verwenden sollen, kommt man um eine Dokumentation gar nicht mehr herum. Eine gute Dokumentation erhöht [...]]]></description>
			<content:encoded><![CDATA[<p>Bei umfangreicheren PHP-Projekten ist es wichtig, das der Quelltext gut dokumentiert ist. So weiß man auch später noch, welche Funktion oder Klasse wofür zuständig ist, und wo man was findet. Wenn man im Team arbeitet oder andere Personen den Quelltext verwenden sollen, kommt man um eine Dokumentation gar nicht mehr herum. Eine gute Dokumentation erhöht die Wiederverwendbarkeit und die Verständlichkeit eines Quelltextes.</p>
<p><a href="http://www.antusblog.de/wp-content/uploads/2009/06/dokumentationderklassefilm.png"><img class="aligncenter size-full wp-image-1427" title="Eine Beispieldokumentation für eine Klasse, erstellt mit PhpDocumentor" src="http://www.antusblog.de/wp-content/uploads/2009/06/dokumentationderklassefilm.png" alt="Eine Beispieldokumentation für eine Klasse, erstellt mit PhpDocumentor" width="470" height="325" /></a><br />
<span id="more-1424"></span><br />
Der <strong>PhpDocumentor</strong> durchsucht Dateien nach Klassen, Funktionen, Konstanten und Variablen und erstellt automatisch eine Dokumentation. Mit sog. DocBlocks kann man die einzelnen Programmelemente direkt im Quelltext beschreiben, der PhpDocumentor fügt die Informationen aus den DocBlocks dann in der Dokumentation zur entsprechenden Klasse, Funktion, o.Ä. hinzu.</p>
<p>Dadurch, dass die Dokumentation direkt im Quelltext geschieht, entstehen einige Vorteile. Die Dokumentation ist immer auf dem neusten Stand, was bei einer separaten Dokumentation nicht unbedingt der Fall ist. Außerdem ist sie immer vollständig, denn auch wenn man zu einem Element keine Beschreibung geschrieben hat, sind zumindest einige Informationen die PhpDocumentor aus dem Quelltext ausgelesen hat, in der Dokumentation enthalten.</p>
<p><strong>Die wichtigsten Vorteile von PhpDocumentor:</strong></p>
<ul>
<li>Die Dokumentation wird automatisch erstellt, PhpDocumentor nimmt einem viel Arbeit ab.</li>
<li>Sie bleibt immer auf dem neusten Stand und ist immer vollständig.</li>
<li>Dadurch das die Dokumentation direkt im Quelltext ist, sieht man auch beim Bearbeiten des Quelltextes sofort, was z.B. eine bestimmte Funktion macht.</li>
<li>Es ist auch möglich auf Anleitungen zu verlinken oder Code in die Dokumentation einzubinden.</li>
<li>Die Dokumentation kann in viele verschiedene Formate exportiert werden, z.B. als PDF oder CHM (Windows-Hilfedatei). Wenn man die Dokumentation im HTML-Format speichert, hat man die Wahl zwischen 15 verschiedenen Smarty-Vorlagen, und es ist auch möglich eigene Vorlagen oder Exporter zu schreiben.</li>
</ul>
<p>Ein Beispiel einer komplett mit DocBlocks dokumentierten Datei findet sich <a href="http://www.antusblog.de/demos/3-quelltexte-dokumentieren-mit-phpdocumentor/beispiel.phps">hier</a>.</p>
<h2>Installation</h2>
<p>Es gibt zwei Möglichkeiten PhpDocumentor zu installieren, entweder über <a href="http://pear.php.net/">PEAR</a>, oder indem man es runterlädt und entpackt. Erstere ist einfacher. Wenn man kein PEAR hat, oder aus irgendeinem anderen Grund lieber die zweite Installationsvariante vorzieht: In der PhpDocumentor-Dokumentation findet sich eine Anleitung zur <a href="http://manual.phpdoc.org/HTMLSmartyConverter/HandS/phpDocumentor/tutorial_phpDocumentor.quickstart.pkg.html#installation.sf">Installation ohne PEAR</a>.</p>
<h3>Installation mittels PEAR</h3>
<p>Wenn man PhpDocumentor über die Kommandozeile verwenden möchte, genügt folgender Befehl zur Installation:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">pear <span style="color: #c20cb9; font-weight: bold;">install</span> <span style="color: #660033;">--alldeps</span> PhpDocumentor</pre></div></div>

<p>Will man auch die Weboberfläche verwenden, muss vorher die Option <code>data_dir</code> der PEAR-Konfiguration verändert werden. Sie muss so angepasst werden, das sie den Pfad zum Dokumente-Verzeichnis des Webservers, das ist das Verzeichnis in dem die Webseiten/PHP-Skripte/etc. liegen, enthält.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">pear config-set data_dir <span style="color: #000000; font-weight: bold;">/</span>pfad<span style="color: #000000; font-weight: bold;">/</span>zum<span style="color: #000000; font-weight: bold;">/</span>htdocs<span style="color: #000000; font-weight: bold;">/</span>verzeichnis<span style="color: #000000; font-weight: bold;">/</span>pear<span style="color: #000000; font-weight: bold;">/</span></pre></div></div>

<p>Anschließend installiert man PhpDocumentor mit obigem Befehl. Nun kann man auch die Weboberfläche verwenden, diese ist, wenn man obigen Befehl verwendet, unter <code>http://localhost/pear/PhpDocumentor</code> zu erreichen.</p>
<h2>Die Benutzung von PhpDocumentor</h2>
<p>Wenn PhpDocumentor angewiesen wird, ein Projekt zu dokumentieren, werden automatisch alle Elemente wie  Klassen, Funktionen, Variablen und Konstanten aus den Dateien ausgelesen und eine Übersicht erstellt. Eine solche Übersicht ist zwar hilfreich, sie ist aber noch viel nützlicher wenn die Funktion und die Eigenschaften der einzelnen Elemente noch näher erklärt werden.</p>
<p>Dazu verwendet man sog. DocBlocks, das sind spezielle Kommentare, die von PhpDocumentor ausgewertet werden. Ein DocBlock sieht aus wie ein mehrzeiliger Kommentar, wird aber mit <code>/**</code> anstatt von <code>/*</code> eingeleitet, und vor jeder Zeile steht ein Sternchen. Ein DocBlock bezieht sich immer auf das darauffolgende Element. Die erste Zeile ist eine kurze Beschreibung des Elements, durch eine Leerzeile getrennt kann auch noch eine längere Beschreibung geschrieben werden. Darauf können dann noch einige Parameter folgen die weitere Informationen geben.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">  <span style="color: #009933; font-style: italic;">/**
   * Aendert den Namen des Films.
   * @param    string   $neuerName Der neue Name des Films.
   * @return   boolean  true bei Erfolg, false wenn ein Fehler aufgetreten ist.
   */</span>
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> aendereName<span style="color: #009900;">&#40;</span><span style="color: #000088;">$neuerName</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">name</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$neuerName</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">// liefert true bei Erfolg, false bei Fehlern.</span>
    <span style="color: #000088;">$ergebnis</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$datenbank</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">aendere</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">filmId</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'name'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$neuerName</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">return</span> <span style="color: #000088;">$ergebnis</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span></pre></div></div>

<p>Im Beispiel folgen auf die Beschreibung der Funktion noch die beiden Parameter <code>param</code> und <code>return</code>, ersterer beschreibt einen Parameter der Funktion, letzterer den Rückgabewert. Ein Parameter beginnt immer mit einem @-Zeichen. Der entsprechende Teil der Dokumentation könnte dann zum Beispiel so aussehen:<br />
<a href="http://www.antusblog.de/wp-content/uploads/2009/06/dokumentationderfunktionaenderename.png"><img src="http://www.antusblog.de/wp-content/uploads/2009/06/dokumentationderfunktionaenderename.png" alt="Beispiel anhand der Funktion aendereName" title="Beispiel anhand der Funktion aendereName" width="456" height="238" class="aligncenter size-full wp-image-1432" /></a><br />
PhpDocumentor erstellt eine Übersicht aller im Projekt vorkommenden Elemente und Dateien. Jedes Element lässt sich dabei auch noch in Kategorien, Pakete und Unterpakete einteilen, wodurch die Dokumentation etwas übersichtlicher wird. So könnte die Klasse Film beispielsweise Teil des Pakets Video sein, welches wiederum Teil von Medienbibliothek ist.</p>
<p>Es ist auch möglich den Autor eines Codes anzugeben, so weiß man, wen man ansprechen kann, wenn man eine Frage hat. Auch Informationen zum Urheberrecht lassen sich in den Quelltext einbauen.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009933; font-style: italic;">/**
 * Stellt einen Film-Eintrag in der Bibliothek dar.
 *
 * Die Klasse Film bietet Funktionen für den Zugriff auf
 * die in der Bibliothek enthaltenen Informationen ueber
 * den Film.
 *
 * @author     Max Mustermann &lt;maxmustermann@example.de&gt;
 * @package    Medienbibliothek
 * @subpackage Video
 * @version    1.23
 * @copyright  Copyright (c) 2009 Max Mustermann
 * @todo       Die Funktion loeschen() funktioniert noch nicht richtig!
 */</span>
<span style="color: #000000; font-weight: bold;">class</span> Film <span style="color: #009900;">&#123;</span>
<span style="color: #666666; font-style: italic;">// ...</span></pre></div></div>

<p><a href="http://www.antusblog.de/wp-content/uploads/2009/06/todoliste.png"><img src="http://www.antusblog.de/wp-content/uploads/2009/06/todoliste.png" alt="PhpDocumentor erstellt auch eine Todo-Liste." title="PhpDocumentor erstellt auch eine Todo-Liste." width="170" height="140" class="alignright size-full wp-image-1454" /></a>Sehr praktisch ist auch der Parameter todo, mit dem man Hinweise auf unfertige Funktionen, Fehler, oder andere Dinge die noch zu erledigen sind, geben kann.</p>
<p>Mit dem Parameter access ist es auch möglich festzulegen ob das Element in der Dokumentation vorkommen soll, so können zum Beispiel interne Funktionen einer Bibliothek ausgeblendet werden, die den Endanwender nicht interessieren. Für die Entwickler der Bibliothek kann dann eine separate Dokumentation generiert werden, welche diese Elemente dann auch enthält.</p>
<h3>Eine Übersicht der wichtigsten Parameter</h3>
<table>
<thead>
<tr>
<th>Parameter</th>
<th>Beispiel</th>
<th>Funktion</th>
</tr>
</thead>
<tbody>
<tr>
<td>@access</td>
<td>@access private</td>
<td>Legt fest ob das Element in der Dokumentation vorkommen soll, standardmäßig public (wird angezeigt). Die Option private sorgt dafür, dass es nicht angezeigt wird.</td>
</tr>
<tr>
<td>@author</td>
<td>@author Max Mustermann &lt;mmustermann@example.de></td>
<td>Der Autor des Codes.</td>
</tr>
<tr>
<td>@category, @package, @subpackage</td>
<td>@package Medienbibliothek</td>
<td>Teilt das Projekt in mehrere Pakete ein, wodurch die Dokumentation übersichtlicher wird.</td>
</tr>
<tr>
<td>@copyright</td>
<td>@copyright Copyright (c) 2009 Max Mustermann</td>
<td>Informationen zum Urheberrecht.</td>
</tr>
<tr>
<td>@deprecated</td>
<td>@deprecated Bitte neue_funktion() benutzen.</td>
<td>Kennzeichnet das Element als veraltet.</td>
</tr>
<tr>
<td>@param</td>
<td>@param integer|float $zahl Eine Zahl.</td>
<td>Beschreibt einen Parameter, die erste Option gibt den erwarteten Typ an, die zweite den Namen des Parameters, der Rest ist die Beschreibung.</td>
</tr>
<tr>
<td>@var</td>
<td>@var string</td>
<td>Beschreibt den Datentyp einer Variable</td>
</tr>
</tbody>
</table>
<p>Eine Übersicht aller verfügbaren Parameter gibt es in der <a href="http://manual.phpdoc.org/HTMLSmartyConverter/HandS/phpDocumentor/tutorial_tags.pkg.html">Dokumentation von PhpDocumentor</a>.</p>
<h3>Code einbinden</h3>
<p>Manchmal möchte man eine Funktion oder Klasse direkt an einem Beispiel beschreiben, auch das ist kein Problem, denn mit dem <code>&lt;code&gt;</code>-Element lässt sich auch Quelltext direkt in die Beschreibung einbinden.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009933; font-style: italic;">/**
   * Loescht den Film aus der Datenbank
   *
   * Diese Funktion wird wie folgt benutzt:
   * &lt;code&gt;
   * $ergebnis = $film-&gt;loeschen();
   * if (!$ergebnis) echo &quot;Film konnte nicht geloescht werden!&quot;;
   * &lt;/code&gt;
   * Und so weiter ...
   */</span></pre></div></div>

<h3>Externe Dokumentation</h3>
<p>Bei sehr langen Beschreibungen ist es sinnvoll, diese auszulagern. Der Quelltext würde ziemlich unübersichtlich werden, wenn mittendrin umfassende Anleitungen zur Benutzung von bestimmten Funktionen oder Klassen stehen würden. Dazu können die Parameter @link und @tutorial verwendet werden. Wie das funktioniert wird im <a href="http://manual.phpdoc.org/HTMLSmartyConverter/HandS/phpDocumentor/tutorial_tutorials.pkg.html">Handbuch vom PhpDocumentor</a> erklärt.</p>
<h2>Erstellen der Dokumentation</h2>
<p>Die Dokumentation kann entweder über die Kommandozeile oder über die Weboberfläche erstellt werden.</p>
<h3>Mit dem Kommandozeilen-Programm phpdoc</h3>
<p>Die Bedienung von phpdoc ist im Grunde ganz einfach, ein Beispiel:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">phpdoc <span style="color: #660033;">-t</span> dokumentation<span style="color: #000000; font-weight: bold;">/</span> <span style="color: #660033;">-d</span> meinprojekt<span style="color: #000000; font-weight: bold;">/</span></pre></div></div>

<p>Der Befehl würde alle PHP-Dateien im Verzeichnis <em>meinprojekt</em> durchgehen, eine Dokumentation daraus erstellen, und diese im Verzeichnis <em>dokumentation</em> ablegen.</p>
<p>Mit dem Parameter <code>-t &lt;Verzeichnis&gt;</code> wird also angegeben, wo die Dokumentation gespeichert werden soll, <code>-d &lt;Verzeichnis&gt;</code> gibt ein Verzeichnis (oder mehrere, durch Kommas getrennt) an, das nach PHP-Dateien durchsucht werden soll. Mit <code>-f &lt;Datei&gt;[,&lt;Datei&gt;, ...]</code> kann man noch weitere Dateien angeben, die für die Dokumentation ausgewertet werden sollen.</p>
<p>Mittels <code>-ti 'Titel der Dokumentation'</code> lässt sich der Titel festlegen, mit <code>-o &lt;Format&gt;</code> lassen sich die Ausgabeformate bestimmen. Ein Beispiel:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">phpdoc <span style="color: #660033;">-ti</span> <span style="color: #ff0000;">'Mein PHP-Projekt'</span> <span style="color: #660033;">-f</span> beispiel.php <span style="color: #660033;">-o</span> html:smarty:hands,pdf:default:default <span style="color: #660033;">-t</span> docs<span style="color: #000000; font-weight: bold;">/</span></pre></div></div>

<p>Der Befehl würde eine Dokumentation für das Projekt mit dem Namen <em>Mein PHP-Projekt</em> erstellen. Es wird nur die Datei <em>beispiel.php</em> ausgewertet, die Dokumentation wird im PDF-Format und im HTML-Format, mit der Vorlage <em>Smarty/HandS</em>, erstellt.</p>
<h3>Mit der Weboberfläche</h3>
<p><a href="http://www.antusblog.de/wp-content/uploads/2009/06/weboberflachevonphpdocumentor.png"><img src="http://www.antusblog.de/wp-content/uploads/2009/06/weboberflachevonphpdocumentor.png" alt="Das Menü der Weboberfläche von PhpDocumentor" title="Das Menü der Weboberfläche von PhpDocumentor" width="450" height="40" class="aligncenter size-full wp-image-1445" /></a><br />
Die Weboberfläche ist sogar noch einfacher zu bedienen, als die Kommandozeilen-Version. Unter <strong>Files</strong> gibt man die Dateien und Verzeichnisse an, die dokumentiert werden sollen. Unter <strong>Output</strong> wird bei <strong>Target</strong> eingetragen wo die Dokumentation gespeichert werden soll, mittels <strong>Output Format</strong> lässt sich festlegen in welchem Format (HTML, PDF, CHM, etc.) die Dokumentation erstellt werden soll, und welche Vorlage verwendet wird. Dabei ist es auch möglich gleich mehrere Ausgabeformate anzugeben. Unter <strong>Config</strong> lassen sich noch der Name des Projekts und ein paar andere Einstellungen konfigurieren. Mit einem Klick auf <em>create</em> (unten rechts) wird die Dokumentation erstellt.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.antusblog.de/2009/06/02/php-quelltexte-dokumentieren-mit-phpdocumentor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Witzige Quelltexte und Kommentare</title>
		<link>http://www.antusblog.de/2009/02/09/witzige-quelltexte-und-kommentare/</link>
		<comments>http://www.antusblog.de/2009/02/09/witzige-quelltexte-und-kommentare/#comments</comments>
		<pubDate>Mon, 09 Feb 2009 22:30:40 +0000</pubDate>
		<dc:creator>Antu</dc:creator>
				<category><![CDATA[Allgemeines]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Kommentare]]></category>
		<category><![CDATA[Lustiges]]></category>
		<category><![CDATA[Quelltext]]></category>

		<guid isPermaLink="false">http://antusblog.de/?p=421</guid>
		<description><![CDATA[Auch Programmierer haben Humor, oder auch einfach mal einen schlechten Tag. Und dabei kommen manchmal ziemlich witzige Sachen bei raus, ein Beispiel gefällig? /* * This function is cleaned from bugs with help from * the Metallica song “Seek and Destroy” * (IMHO the best song ever from Metallica) */ Mehr davon gibt es auf [...]]]></description>
			<content:encoded><![CDATA[<p>Auch Programmierer haben Humor, oder auch einfach mal einen schlechten Tag. Und dabei kommen manchmal ziemlich witzige Sachen bei raus, ein <a href="http://www.codecandies.com/2009/02/09/seek-and-destroy/" target="_blank">Beispiel</a> gefällig?</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">/*
 * This function is cleaned from bugs with help from
 * the Metallica song “Seek and Destroy”
 * (IMHO the best song ever from Metallica)
 */</span></pre></div></div>

<p>Mehr davon gibt es auf <a href="http://www.codecandies.com/" target="_blank">www.codecandies.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.antusblog.de/2009/02/09/witzige-quelltexte-und-kommentare/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

