Quakenet/#php Tutorial

Hinweis: Wenn sie diese Seite von einer externen URL aufgerufen haben achten sie darauf das alle Kapitel aufeinander aufbauen. Stellen sie daher sicher dass sie alle vorherigen Kapitel gelesen haben, da sie sonst relevante Informationen übersehen.

Einrücken

  1. Einrücken
  2. Einrücken von Anweisungen und Funktionsaufrufen
  3. If-Abfragen
  4. Schleifen
  5. Funktionsdefinitionen
  6. Einrücken von Klassen
  7. Switch Einrücken
  8. Einrücken des Beispielcodes

1. Einrücken

Um seine PHP-Skripte besser zu strukturieren sollten diese sauber eingerückt werden. Als Beispiel nehmen wir folgenden PHP-Code.

<?php
error_reporting
(E_ALL);
ini_set('display_errors'1);
function 
todo($str) {
for(
$i=0;$i<strlen($str);$i++) {
if(
"z" == $str[$i]) {
$str[$i]="1";
}else{
if(
"a" == $str[$i]) {
$str[$i]="2";
}else{
switch(
$str[$i])
case 
"b":case "c":
$str[$i]=1;
break;
case 
"c":
$str[$i]=0;
}
}
}
}
class 
Foobar {
private 
$bar;
public function 
__construct($a) {
$this->bar $a;
}
public function 
ersetze() {
foreach(
$a as $value) {
if(
is_string($value)) {
$value=todo($value);
}
}
}
}
$obj = new Foobar(array("x","z"));
$obj->ersetze();
?>

Es ist dabei Egal was dieser Code macht. Hieran ist zu erkennen dass keine Einrückung am Code vorgenommen wurde. Somit ist nicht leicht zu erkennen, wo ein Programmblock aufhört und wo der nächste anfängt. So kann man z.B. nicht verfolgen welche Anweisungen noch in einer Schleife stehen und welche nicht mehr. Das Verfolgen des PHP-Skriptes ist jedoch ein wichtiger Bestandteil wenn es darum geht das PHP-Skript zu überprüfen und eventuelle Fehler zu beseitigen. Daher beschreibt dieses Kapitel die Strategien wie Eingerückt werden.

Es ist egal wie genau eingerückt wird, hauptsache es wird eingerückt. Dabei sollte konsequent eingerückt werden und nicht nur sporanisch an einigen Stellen. Hier wird weitgehend nach dem PEAR Coding Standard eingerückt. Alle Regeln können auch dort nachgelesen werden. Des Weiteren werden hier alle Einrückungen mit 4 Leerzeichen realisiert, nicht mit Tabulatoren. Im Editor muss dies ggf. umgeschaltet werden, das bei einem Tabulator-Druck mit Leerzeichen eingerückt wird. Selbstverständlich gibt es beliebig viele Strategien wie eingerückt wird, siehe http://en.wikipedia.org/wiki/Indent_style.

2. Einrücken von Anweisungen und Funktionsaufrufen

Bei Funktionsaufrufen werden die Parameter üblicherweise (neben dem notwendingen Kommata) mindestens mit einem Leerzeichen getrennt. Somit ist sofort erkennbar was die Parameter einer Funktion sind. Bei sehr langen Parametern können diese auch untereinander geschrieben werden.

<?php
$str 
str_replace('Foobar''FOOBAR'$str); // Leerzeichen zwischen Parametern
$str name_xyz('Ein sehr verdammt langer Parameter',
                
'Weitere Parameter',
                
false,
                array(
124),
                
"foobar"); // Funktionsaufruf mit 5 Parametern, der 4. ist ein Array
?>

In anderen Teilen sollten zusätzliche Leerzeichen eingefügt werden, um deren Lesbarkeit zu erhöhen.

<?php
$var      
"Text"// <-- paar Leerzeichen vor dem Gleichheitszeichen
$langevar "Text";
?>

3. If-Abfragen

Bei einer If-Abfrage wird der Inhalt vom Rumpf um eine Stufe eingerückt. Die öffnende geschweifte Klammer wird mit einem Leerzeichen getrennt hinter der If-Abfrage geschrieben, die schließende geschweifte Klammer kommt in eine extra Zeile und wird auf Höhe der If-Abfrage geschrieben. Nach dem Schlüsselwort if wird ein Leerzeichen eingefügt.

<?php
if (bedingung) {
    
// Anweisungen
    
foobar();
    
barbli();
    
xyz();
    
$var "x";
}
?>

Wenn die If-Abfrage einen else oder else if Teil enthält wird dieser hinter der geschweiften Klammer geschrieben, auch wieder mit einem Leerzeichen getrennt.

<?php
if (bedingung) {
    
tu_das();
} else if (
bedingung2) {
    
mach_dies();
} else {
    
dann_halt_das();
}
?>

4. Schleifen

Bei Schleifen wird der Inhalt des Schleifenrumpfs wie bei einer If-Abfrage um eine Stufe eingerückt. Die öffnende geschweifte Klammer wird mit einem Leerzeichen hinter dem Schleifenkopf geschrieben, die schließende Klammer wird auf eine extra Zeile geschrieben.

<?php
while (bedingung) {
    
arbeite();
}
?>

Bei einer For-Schleife werden die einzelnen Teile zusätzlich mit einem Leerzeichen getrennt, die Teile selbst enthalten üblicherweise keine Leerzeichen.

<?php
for ($i=0$i<10$i++) {
    
arbeite();
}
?>

Der selbe Stil wird für do-while- und foreach-Schleifen verwendet.

<?php
do {
    
arbeite();
} while (
bedingung);

foreach (
$array as $value) {
    
arbeite($value);
}
?>

5. Funktionsdefinitionen

Eine Funktionsdefinition sollte immer ein PHPDoc-Kommentar besitzen. So kann jeder Entwickler nachlesen was diese Funktion leisten soll und was sie macht. Die Parameter einer Funktion werden zusätzlich zum Kommata mit einem Leerzeichen getrennt. Die geöffnete geschweifte Klammer wird mit einem Leerzeichen getrennt hinter der Parameterliste angehängt. Die geschlossene geschweifte Klammer kommt in eine extra Zeile auf Höhe des Schlüsselworts function. Der Funktionsrumpf wird nun dabei um eine Stufe eingerückt.

<?php
/**
 * PHPDoc zur Funktion foobar
 */
function foobar($bar$bla) {
    
arbeite($bar);
    
arbeite($bla);
}
?>

6. Einrücken von Klassen

Klassen werden nach dem selben Stil eingerückt. Die einzelnen Eigenschaften und Methoden werden untereinander zusätzlich von einer Leerzeile getrennt. Wie bei den Funktionen gehören (besonders) auch bei Klassen PHPDoc-Kommentare die die einzelnen Elemente beschreiben.

<?php
/**
 * PHPDoc zu Foobar
 */
class Foobar {
    
/**
     * PHPDoc zu $xyz
     */
    
private $xyz;

    
/**
     * PHPDoc zu XYZ()
     */
    
public function XYZ() {
        
arbeite();
    }
}
?>

7. Switch Einrücken

Switch-Abfragen folgen dem selben Einrückstil wie die anderen Programmteile. Die case Anweisungen werden jedoch auf Höhe des switch-Schlüsselworts geschrieben. Das heißt das vom Schritt switch->case->Programmcode nicht zwei mal eingerückt wird sondern nur einmal. Das break; (falls vorhanden) bleibt dabei auf der Höhe der Einrückung.

<?php
switch ($var) {
case 
'z':
    
arbeite();
    break;
case 
'y':
    
arbeite();
default:
    
arbeite();
}
?>

8. Einrücken des Beispielcodes

Als Beispiel wird nochmal der Code von oben eingerückt. Hier der ursprüngliche PHP-Code.

<?php
error_reporting
(E_ALL);
ini_set('display_errors'1);
function 
todo($str) {
for(
$i=0;$i<strlen($str);$i++) {
if(
"z" == $str[$i]) {
$str[$i]="1";
}else{
if(
"a" == $str[$i]) {
$str[$i]="2";
}else{
switch(
$str[$i]) {
case 
"b":case "c":
$str[$i]=1;
break;
case 
"c":
$str[$i]=0;
}
}
}
}
}
class 
Foobar {
private 
$bar;
public function 
__construct($a) {
$this->bar $a;
}
public function 
ersetze() {
foreach(
$a as $value) {
if(
is_string($value)) {
$value=todo($value);
}
}
}
}
$obj = new Foobar(array("x","z"));
$obj->ersetze();
?>

Und nun wie er sauber eingerückt wird.

<?php
error_reporting
(E_ALL);
ini_set('display_errors'1);

/**
 * PHPDoc zu Todo
 */
function todo($str) {
    for(
$i=0$i<strlen($str); $i++) {
        if (
"z" == $str[$i]) {
            
$str[$i]="1";
        } else {                      
// besser zu einem else if()
            
if ("a" == $str[$i]) {    // zusammenfassen, um eine Einrückungstiefe zu sparen
                
$str[$i]="2";
            } else {
                switch (
$str[$i]) {
                case 
"b":
                case 
"c":
                    
$str[$i]=1;
                    break;
                case 
"c":
                    
$str[$i]=0;
                }
            }
        }
    }
}

/**
 * PHPDoc zu Foobar
 */
class Foobar {
    
/**
     * PHPDoc zu $bar
     */
    
private $bar;

    
/**
     * PHPDoc zum Konstruktor
     */
    
public function __construct($a) {
        
$this->bar $a;
    }

    
/**
     * PHPDoc zu ersetze()
     */
    
public function ersetze() {
        foreach (
$a as $value) {
            if (
is_string($value)) {
                
$value todo($value);
            }
        }
    }
}

$obj = new Foobar(array("x","z"));
$obj->ersetze();
?>

Fragen zum Kapitel

Keine Fragen zum Kapitel vorhanden

Zurück zu Weiter zu
Copyright © bei den OPs von #php.de/QuakeNet Valid XHTML 1.0 Strict Valid CSS!