Saubere PHP-Programmierung

Wenn man in PHP programmiert, ist es immer sinnvoll ein paar Standard einzuhalten. Dadurch wird einerseits die Ordung und Effizienz des Codes gesteigert, aber auch wird der Code dadurch leichter verständlich und lesbarer, was besonders bei einer Teamarbeit zu beachten ist.

Im folgenden möchte ich ein paar sinnvolle Regeln vorstellen, die in PHP quasi Standard sind.

1. Einrücken

Eine der wichtigsten Sachen beim Programmieren, egal in welcher Sprache ist einrücken. Dadurch kann man zum Beispiel auf den ersten Blick sehen, wo die Abschlußklammer von der if-Anweisung ist.
Der bisher bestehende Standard besagt das man hier 4 Leerzeichen verwenden soll. Bei guten IDEs oder Editoren (z. Bsp.: Sublime Text 2) kann man einstellen wieviele Leerzeichen ein TABULATOR bedeutet.

2. Sprechende und aussagekräftige Variablen- und Funktionsnamen verwenden

Variablen oder Funktionen sollten immer nachdem benannt sein, was sie beinhalten bzw. machen. Beispielsweise haben wir eine Funktion die den Inhalt eines Textfeldes ausliest. Wir könnten diese Funktion jetzt einfach textarea() nennen, jedoch kann dieser Name Fragen aufwerfen. Gibt die Funktion ein Textfeld aus, schreibt die Funktion irgendwas in die Datenbank? Viel sinnvoller wäre hier der Name get_textarea_content(), dadurch ist mit einem Blick klar was die Funktion macht und es muss nicht erst die Funktionsdefinition studiert werden.

Das gleiche gilt für Variablen: Eine Variable die (z. Bsp.: bei einem Nachrichtensystem) den Empfänger und eine andere die den Text beinhaltet. Kann man jetzt $re und $txt nennen, bei letzterem lässt es sich möglicherweise noch ableiten was gemeint ist, doch bei der Variable für den Empfänger ist dies fast unmöglich. Also gilt auch hier Abkürzungen vermeiden.

Beim Bennennen von Funktionen sollte man auf die bestehenden Konventionen achten: Klassennamen werden mit CamelCase benannt, Funkionsnamen aber mit Unter_Strich!

3. Konstanten werden in Großbuchstaben definiert

Damit sich Konstanten von normalen Text und Code abheben und erkannt werden können werden diese als Großbuchstaben definiert. Ein kleines Beispiel:

define('VERSION', '2.0');

Wenn dann diese Variable in einem String benutzt wird hebt sich diese deutlich ab:

echo 'Sie benutzen Version '. VERSION .' !';

Generell sollte man sich gut mit Konstanten beschäftigen. Bevor man in einem Code irgendeinen Faktor einfügt, sollte man sich überlegen ob man nicht lieber eine Konstante dafür anlegt. Es kann leicht passieren das einem nach 2 Wochen keine Ahnung mehr hat, wofür die Zahl stand und was sie bewirkte. Stichwort: Magic Numbers

4. MySQL Anweisungen werden in Großbuchstaben geschrieben

Wo wir gerade schon bei Großbuchstaben sind, sollten wir auch über MySQL Anweisungen reden. Auch diese sollten in Großbuchstaben notiert werden, damit ,wie bei den Konstanten, sich diese von normalen Strings abheben.

Schließlich sieht sowas:

$sql = "SELECT * FROM tbl_faq WHERE geloest='1' ORDER BY date DESC";

wesentlich organisierter aus als hierbei:

$sql = "select * from tbl_faq where geloest='1' order by date desc";

Ein neuer Programmierer kann so sehr schnell die MySQL Kommandos erkennen und inspizieren.

5. Keine unnötigen Variablen anlegen

Bei kleinen Funktionen passiert es öfter das unnötige Variablen angelegt werden. Auch das möchte ich kurz an einem Beispiel zeigen:

$question = htmlspecialchars($db->chars($_POST['question']));
$user = $user->row["user_id"];
$ip = $_SERVER['REMOTE_ADDR'];

new_question($question, $user, $ip);

Wie mann sehen kann ist für jeden Parameter eine Variable angelegt worden. Dies ist bei so kleinen Funktionen aber relativ sinnlos, da die Übersicht nicht gefährdet ist, wenn die Parameter direkt in die Funktion geschrieben werden. Somit spart man sich in diesem Beispiel zwei Rechenschritte und erhöht die Performance (zwar nicht messbar, aber es passiert 😉 )

$question = htmlspecialchars($db->chars($_POST['question']));

new_question($question, $user->row["user_id"],
             $_SERVER['REMOTE_ADDR']);

Bei einer größeren Funktion mit über 5 Parametern empfehle ich jedoch, wieder auf Variablen zurückzugreifen, da sonst es sehr schwierig wird, den Überblick zu behalten.

6. Kommentieren

Wichtige, komplexe oder schwierige Codeabschnitte sollte man immer kommentieren, sodass man auch ich 3 Monaten noch versteht was dort gemacht wird.
Ich habe mir folgende Kommentarstruktur angewöhnt, da sie es einfach macht Blöcke schnell zu erfassen.

// +++ Write the entry in the database
...
$db->execute('INSERT INTO posts ...');
// --- Write the entry in the database

Sonst kommentiere ich einfach ein paar Schritte die ich schwer finde.
Wenn man im Team arbeitet ist Kommentieren noch wichtiger. Wenn dann eine Funktion etc. auskommentiert wird sollte hinzugefügt werde, Wer sie auskommentiert hat, Wann sie auskommentiert wurde und Warum. Das erleichter den anderern Programmieren später das weitere Vorgehen.

7. Variablen initalisieren

Variablen sollte man immer initalisieren. Sonst kommt, wenn man das Error-Reporting auf E_ALL gesetzt hat, die altbekannte Warnung „Undefined Variable: $var…..“.
Ich habe am Anfang des Skriptes immer einen Abschnitt wo ich alle Variablen initalisiere. Der sieht dann so aus:

// +++ Initalization Vars
$text = "";
$button = "";
$message = "";
$length = "";
// --- Initalization Vars

Eure Meinung

Wie sieht es bei euch aus, beachtet ihr diese oder andere Standards? Falls ich irgend was vergessen habe oder ihr meint man sollte es anderes machen, schreibt einfach ein Kommentar. Ich freue mich auf eure Meinung. Ich möchte hier nochmal betonen, das dies meine Auslegung der Standards ist und kein Nonplusultra darstellen soll.

Ich bin Kevin, und schreibe hier über Themen die sich von CSS über Designs bis zur testgetriebenen Entwicklung mit PHP erstrecken. Ich arbeite in einer kleinen Firma als PHP-Entwickler und entwickle dort PHP Backends für verschiedene Projekte vorallem mit Laravel. Privat betreibe ich noch diesen Blog und notesafe.

4 Kommentare Schreibe einen Kommentar

  1. Kann da Patschi nur zustimmen. Bei PHP finde ich Variablen Initialisieren eher unnötig, da man bei PHP Variablen mehrfach verwenden kann.

    Das Initialisieren sollte eher bei C oder Java berücksichtigt werden ^^

    Kommentare?
    Joar, sind sehr sinnvoll. Macht leider nicht jeder 😉

Schreibe einen Kommentar zu Kevin Antworten abbrechen