Die 5 schlimmsten PHP Anfänger-Sünden
31.03.2009
Jeder Anfang ist schwer, so auch der in PHP. Durch meine Tätigkeit als PHP Moderator auf der-Webdesigner.net stoße ich immer wieder auf typische Anfänger-Sünden. Häufig werden diese nichtsahnend von Codeschnipseln aus dem Internet übernommen. Es ist deshalb immer besser, wenn man sich mit den Grundlagen beschäftigt, bevor es an die Erstellung eigener Quelltexte geht. Mit der Zeit erkennt man in der Regel selbst, was einen guten Quelltext ausmacht.Deshalb möchte ich in diesem Artikel ein wenig mit den - meiner Meinung nach - fünf schlimmsten PHP Sünden abrechnen und Anfänger auf typische Fehler beim Einstieg in PHP aufmerksam machen.
Damit es spannend bleibt, beginne ich mit dem fünften Platz.
5. Funktionen ohne Klammern
Ein typisches Erkennungsmerkmal von Funktionen sind die runden Klammern, in denen die einzelnen Parameter angegeben werden. Besonders bei Includes werden sie allerdings gerne weggelassen.Sünde:
include 'startseite.php';Diese Schreibweise wird von PHP zwar akzeptiert, ist mir persönlich aber ein Dorn im Auge. Es macht nämlich keinen Sinn, Funktionsaufrufe das eine Mal mit Klammern, ein anderes Mal wieder ohne Klammern zu schreiben. Ich bin deshalb stets dafür, alles einheitlich zu schreiben, zumal die Klammern bei mehreren Parametern ohnehin notwendig werden. Die einzige Ausnahme stellt in diesem Zusammenhang echo für die Ausgabe von Strings dar.
Besser:
include('startseite.php');
4. Array-Keys ohne Anführungsstriche
Im Prinzip ist der Zugriff auf Arrays von jedem schnell verstanden. Dennoch lässt sich ein bestimmtes Phänomen bei Anfängern immer wieder beobachten: Keys, die aus einem String bestehen, werden ohne Anführungsstriche geschrieben:Sünde:
$row[beitrag]Leider akzeptiert PHP diese Schreibweise ebenfalls, richtig ist sie deshalb aber noch lange nicht. Strings müssen nämlich immer durch doppelte bzw. einfache Anführungsstriche gekennzeichnet werden. Nur Zahlen werden ohne sie notiert.
Besser:
$row['beitrag']; aber auch $row[0];
3. Variablen mit unterschiedlichen Inhalten überschreiben
Eine Variable sollte niemals sinnlos überschrieben werden. Stattdessen sollten bei Bedarf neue Variablen erzeugt werden. Dieses Problem lässt sich besonders häufig bei einfachen Include-Scripten beobachten:Sünde:
<?php
$page_id = $_GET['page_id'];
if($page_id == '') {
$page_id = "pages/startseite.php";
include $page_id;
}
[...]
?>
In diesem Beispiel finden sich gleich mehrere Sünden, vielleicht erkennt ihr sie am Ende meines Artikels ja alle. Ich möchte hier aber nur auf die aktuelle eingehen.Zu Beginn wird der Variable $page_id der Inhalt des URL-Parameters page_id zugewiesen (das kann irgendein String oder Integer sein).
Nach der if-Abfrage wird diese Variable jedoch mit einem Dateipfad für den nachfolgenden Include überschrieben. Der ursprüngliche Wert geht also verloren. Stattdessen wird der Variable ein Pfad zugewiesen, der mit der Bedeutung einer page_id eigentlich wenig gemeinsam hat. Es geht hier also auch um sinnvolle Variablenbezeichnungen, damit ersichtlich wird, welchen Zweck eine Variable eigentlich erfüllt.
Besser:
<?php
$page_id = $_GET['page_id'];
if($page_id == '')
{
$page = 'pages/startseite.php';
include($page);
}
[...]
?>
2. HTML Ausgaben in doppelten Anführungsstrichen
Wir nähern uns schon mit großen Schritten dem Sieger. Der zweite Platz geht an eine Sünde, die vor allem gegen jegliche Ästhetik geht: Dies sind HTML Ausgaben, die als Strings innerhalb von doppelten Anführungsstrichen notiert werden. Anführungsstriche im HTML-Quelltext müssen deshalb mit einem Backslash ("\") maskiert werden, was nicht nur zusätzliche Arbeit bedeutet, sondern den Quelltext unnötig aufbläht und unübersichtlich macht.Sünde:
echo "<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\" />", "<meta http-equiv=\"content-style-type\" content=\"text/css\" />";Besser ist es, auf einfache Anführungsstriche zurückzugreifen oder gleich die Heredoc-Ausgabe zu verwenden.
Besser:
echo '<meta http-equiv="content-type" content="text/html; charset=UTF-8" />', '<meta http-equiv="content-style-type" content="text/css" />'; oder echo <<<HEREDOC <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> <meta http-equiv="content-style-type" content="text/css" /> HEREDOC;
1. Doppelte Anführungsstriche, und zwar überall
Es ist soweit, wir kommen zur schlimmsten Anfänger-Sünde schlechthin: Der rigorose Umgang mit doppelten Anführungsstrichen. Eigentlich machen sie nur Sinn, wenn in Strings Variablen enthalten sind, die geparst werden sollen.echo "Hallo $name!";Sinnlos sind dagegen Zeilen wie diese:
Sünde:
$text = "Dieser Text enthält keinerlei Variablen."; echo "$name"; $width = "600";Ähnlich wie bei Platz 2 sollte auf die einfachen Anführungsstriche zurückgegriffen bzw. im Fall von Variablen und numerischen Werten ganz darauf verzichtet werden.
Besser:
$text = 'Dieser Text enthält keinerlei Variablen.'; echo $name; $width = 600; $dynamischer_text = $name.' liest gerade diesen Artikel.';
Das ist sie also, meine Liste der fünf schlimmsten PHP Sünden. Vielleicht hat sich ja der ein oder andere an seine Anfänge zurückerinnert gefühlt oder konnte sogar etwas dazulernen.
Ich erhebe natürlich nicht den Anspruch, dass meine Liste vollständig ist und wirklich alle Anfänger-Sünden enthält. Dazu reichen fünf Plätze auch gar nicht aus. Ihr könnt die Liste aber gerne über die Kommentarfunktion bewerten und ergänzen.
Kommentare
Kommentar hinzufügen
Sebastian Fuchs
31.03.2009
Ja, da sagst du was.
Als ich mir diesen Artikel überlegt habe, stand die Kommentierung von Quelltexten und deren Einrückung ebenfalls auf meiner Liste. Ich habe mich dann allerdings für obige Sünden entschieden, da diese meiner Meinung nach ein wenig mehr "Popularität" vertragen können. Auf die Kommentierung wird in dem Zusammenhang ja meist häufiger hingewiesen.
Als ich mir diesen Artikel überlegt habe, stand die Kommentierung von Quelltexten und deren Einrückung ebenfalls auf meiner Liste. Ich habe mich dann allerdings für obige Sünden entschieden, da diese meiner Meinung nach ein wenig mehr "Popularität" vertragen können. Auf die Kommentierung wird in dem Zusammenhang ja meist häufiger hingewiesen.
Thomas
01.04.2009
Also die ersten zwei sind IMHO überhaupt keine Sünden, es gibt überhaupt keinen Grund wieso man das nicht machen sollte.
Variablen überschreiben: wieso nicht, solange man sich auskennt, man braucht ja nicht für alles eine neue Variable.
Die letzten zwei Punkte sind auch nicht wirklich Sünden, sondern Geschmackssache (ok, Int in Anführungszeichen ist schon sehr hirnlos :-)
Viel viel schlimmer wäre z.B. wenn ein get-Parameter als Übergabewert für ein include verwendet würde, aber die Punkte die du da beschreibst sind wirklich keine Sünden...
Variablen überschreiben: wieso nicht, solange man sich auskennt, man braucht ja nicht für alles eine neue Variable.
Die letzten zwei Punkte sind auch nicht wirklich Sünden, sondern Geschmackssache (ok, Int in Anführungszeichen ist schon sehr hirnlos :-)
Viel viel schlimmer wäre z.B. wenn ein get-Parameter als Übergabewert für ein include verwendet würde, aber die Punkte die du da beschreibst sind wirklich keine Sünden...
Mit den Array-Keys hast Du mich erwischt. Das man Strings mit (einfachen) Anführungszeichen abgrenzt, war mir bewusst, doch so konsequent dies auch bei den Array-Keys zu machen, war ich bisher nicht :(
Meiner Meinung nach ist die schlimmste Sünde noch nicht auf Deiner Liste.
Für mich ist das falsche oder fehlende Kommentierung! Es gibt nur wenig schlimmeres als unkommentierten Code - naja, vielleicht wild zusammengeborgte Codeschnipsel...
Mit hanfigen Grüßen
Steffen