1. Was sind Kommentare?
In PHP werden Texte bzw. Textstellen die der PHP-Interpreter
ignoriert als Kommentare bezeichnet. Dies ist Vergleichbar mit den HTML-Kommentaren mit der
<!-- -->
-Syntax. Somit kann man, wie der Name es schon sagt, Kommentare zum Skript
schreiben bis hin zu einzelnen Hinweisen zu Zeilen im PHP-Skript hinzufügen. So
kann z.B. ein Author seinen Namen und die Lizenzbestimmungen in seinem PHP-Skript
hinterlassen, ohne dass der PHP-Interpreter sich darüber beschwert dass ungültiger
PHP-Code im PHP-Skript steht.
2. Syntax von Kommentaren
In PHP gibt es 4 Arten von Kommentartypen, wobei meistens nur 3 von denen benutzt. Und von diesen drei gibt es zwei Kommentartypen die fast identisch sind. Daher wird nur zwischen zwei Klassen von Kommentartypen unterschieden. Einmal den einzeiligen Kommentaren und den mehrzeiligen Kommentaren.
-
Bei den einzeiligen Kommentaren handelt es sich um Kommentare die bis zum Zeilenende oder
?>
gelten. Solch ein einzeiliger Kommentar wird mit der Zeichenkette//
eingeleitet (nicht zu verwechseln mit der String Escape-Sequenz\\
). Der folgende Text wird dann als Kommentar behandelt und somit vom PHP-Interpreter ignoriert.<?php
echo 'Text'; // gib einen Text aus
// Gebe nun einen weiteren Text aus
echo 'weiterer Text';
// echo 'ich werde nicht ausgegeben, da ich in einem Kommentar stehe';
echo 'Ich werde ausgegeben, obwohl ich ein // im String enthalte';
// kommentar läuft bis zum php-ende ?><?php echo 'ich bin nicht mehr im kommentar'; ?>An den Beispielen sieht man, dass nicht jedes
//
ein Kommentar ist, z.B. wenn es in einem String steht. Auch wird?>
als mögliches Ende erkannt. -
Mehrzeilige Kommentare definieren Kommentare die sich über mehrere Zeilen erstrecken können. Statt also in jeder Zeile am Anfang ein
//
zu schreiben wird ein Start- und Ende-Zeichen für einen mehrzeiligen Kommentar geschrieben. Ein mehrzeiliger Kommentar wird dabei mit/*
gestartet und endet beim nächsten*/
.<?php
echo "Wieder was ausgeben";
/* Irgendein Kommentar der
sich über mehrere
Zeilen
erstreckt bis zum
entsprechenden stopzeichen */
echo "Und wieder im PHP-Modus drin";
?>Für das Auge kann man diese Kommentare nun etwas lesbarer schreiben, so z.B. einige Zeilen einrücken.
<?php
echo "Wieder was ausgeben";
/* Irgendein Kommentar der
sich über mehrere
Zeilen
erstreckt bis zum
entsprechenden stopzeichen */
echo "Und wieder im PHP-Modus drin";
?>Dies kann man auch übertreiben und Kommentare noch besonders vorheben.
<?php
/***********************
* Konfiguration laden *
***********************/
echo "Config laden";
?>Hier sieht man auch, dass es nicht nötig ist Leerzeichen vor bzw. nach den Start- und End-Markierungen hinzuzufügen. Bei dieser Art der Kommentare kann das PHP-Ende
?>
nicht mehr als Kommentarende erkannt werden. -
Die dritte Variante sind die Kommentare im PHPDoc Style. Diese sind fast identisch mit den mehrzeiligen Kommentare. Der Unterschied liegt an der Startmarkierung
/**
wobei das Leerzeichen am ende ein beliebiges Whitespace ist. Oft wird dabei ein Zeilenumbruch statt den Leerzeichen benutzen.<?php
/**
Ein Kommentar im PHPDoc Style
*/
echo "wieder normaler php code";
?>Nun stellt man sich die Frage warum zwei unterschiedliche mehrzeilige Kommentare existieren wo die sich kaum Unterscheiden. Mit PHPDoc bezeichnet man spezielle Kommentare die dazu dienen bestimmte Teile im PHP-Skript zu Kommentieren. So schreibt man z.B. vor eigens definierten Funktionen einen solchen PHPDoc Kommentar der beschreibt wie diese Funktion arbeitet und was sie leistet.
<?php
/**
* Gibt eine Zahl aus.
*
* Die folgende Funktion gibt die übergebene Zahl aus.
*
* @param i Die Zahl die ausgegeben werden soll.
*/
function ausgeben($i) {
// ...
}
?>Der Aufbau eines solchen PHPDocs wird durch das phpDocumentor Projekt geregelt. Dies ist vergleichbar mit dem Javadoc Tool mit dem selben hintergedanken. Wenn nun solche PHPDoc-Kommentare in einem Quellcode einfügt werden, so können spezielle Programme (eben dieses PHPDoc) verwendet werden die diese PHPDoc-Kommentare auslesen und verarbeiten. Sie erstellen dann aus den Daten HTML-Seiten mit den Beschreibungen der Funktionen (und Klassen). Somit können fremde PHP-Autoren sich einfacher in den PHP-Quellcode einlesen und müssen nicht mehr oder weniger raten was eine Funktion machen soll sondern lesen einfach in den generierten HTML-Dateien die Beschreibungen nach.
3. Auskommentieren
Neben den Schreiben von Entwicklerhinweisen ist es auch möglich Kommentare für etwas zu nutzen was allgemein Auskommentieren genannt wird. Im Entwicklungsprozess möchte man z.B. manchmal PHP-Code deaktieren bzw. nicht ausführen lassen, unabhängig von eventuellen Benutzereingaben. Eine Möglichkeit wäre es den entsprechenden PHP-Code zu löschen. Aber dann ist er entsprechend nicht mehr vorhanden und muss wieder hingeschrieben werden wenn man ihn doch wieder braucht. Hingegen einfacher ist es den PHP-Code kurzerhand in einen Kommentar zu packen. Nehmen wir an wir hätten folgenden PHP-Code.
<?php
mach_was();
mach_dies();
und_jenes();
?>
Wenn der Entwickler nun die Ausführung von mach_dies()
kurz deaktiveren will kann
er diesen in einen einzeiligen Kommentar schreiben.
<?php
mach_was();
//mach_dies();
und_jenes();
?>
Wenn man nun mit seinen Tests des PHP-Skripts fertig ist so braucht er dann einfach die
//
Zeichen löschen. Für mehrere Zeilen kann man auch die mehrzeiligen
Kommentare verwenden.
<?php
mach_was();
/*
mach_dies();
und_jenes();
und_dies();
und_das();
*/
und_wieder_dies();
?>
Hier gibt es einen Trick wie man die Ausführung wieder schnell aktivieren kann, neben
dem Löschen von /*
und */
. Dazu muss man zuerst vor dem
*/
ein //
schreiben, also den Start eines einzeiligen Kommentars.
<?php
mach_was();
/*
mach_dies();
und_jenes();
und_dies();
und_das();
//*/
und_wieder_dies();
?>
Um nun die Ausführung wieder zu aktivieren ersetzt man /*
durch //*
,
formt das ganze zu einem einzeiligen Kommentar um.
<?php
mach_was();
//*
mach_dies();
und_jenes();
und_dies();
und_das();
//*/
und_wieder_dies();
?>
Jetzt sieht man auch warum man vorhin die //
bei */
einfügen musste. So
wird sichergestellt dass kein ungültiger PHP-Code entsteht (gennant Parse Error).
Wie man sieht existieren nun 2 einzeilige Kommentare. Wenn man nun wieder das //*
durch /*
ersetzt so wird das ganze wieder zu einem mehrzeiligen Kommentar bis zum
*/
.
Da ein mehrzeiliger Kommentar mit einem */
endet ist es nicht möglich innerhalb
des mehrzeiligen Kommentars die Zeichenkette */
zu verwendet. Dies mag trivial klingen
jedoch ist dies eine beliebte Fehlerquelle bei Kommentaren, wenn versucht wird
Kommentare zu schachteln. Dies macht man nicht bewusst sondern eher durch unbedachtheit.
Wir nehmen folgenden PHP-Code an.
<?php
mach_dies();
mach_das();
/*
deaktiviert();
deaktiviert2();
*/
und_dieses();
und_jenes();
?>
Nun möchte man einen größeren Block deaktivieren, z.B. von mach_das()
bis und_dieses()
.
Naiv könnte man wieder einen mehrzeiligen Kommentar einfügen.
<?php
mach_dies();
/*
mach_das();
/*
deaktiviert();
deaktiviert2();
*/
und_dieses();
*/
und_jenes();
?>
Bei diesem PHP-Code würde der PHP-Interpreter die Abarbeitung unterbrechen. Anhand der Färbung hier im Tutorial ist
zu erkennen dass der äußere Kommentar nicht als solches erkannt wird. Jedoch aus Sicht von PHP ist alles logisch
und sinnvoll. In Zeile 3 erkennt PHP den Beginn eines mehrzeiligen Kommentars und in Zeile 8 das Ende des
mehrzeiligen Kommentars (nicht in Zeile 10 wie gewollt). Somit würde auch und_dieses()
Ausgeführt werden. Jedoch scheitert der PHP-Interpreter schon am Parsen des Skripts, da er mit dem */
in Zeile 10 nichts anfangen kann, und quittiert die Abarbeitung mit einem Parse Error.
Zwar erkennt man hier schnell den Fehler, aber bei größeren Programmcode kann sich so ein Parse Error einschleichen
weil man zuerst einen kleineren Kommentar hat und darüber ein größeren Kommentar erzeugt.