PHP Coding Standard

Logo: PHP
30. Empfehlung 2: Jede Kontrollstruktur hat einen Block mit Klammern

Um Arbeit zu sparen werden manchmal Klammern nicht gesetzt. Der PHP Parser verlangt dies auch nicht, trotzdem kann diese Faulheit ganz üble Folgen haben. Also muss jede Kontrollstruktur einen Block haben, der von geschweiften Klammern umschlossen wird. Die Ausnahme bilden SWITCH-CASE Strukturen, wo ein "case:" mehrere Anweisungen enthalten kann und dann mit einem "break;" abgeschlossen wird.

Ungültig
   // No block at all - No!
   while ($row = mysql_fetch_assoc($result));
   echo 'WHILE is finished!';

   // looks the same, doesn't it?
   while ($row = mysql_fetch_assoc($result))
   echo 'WHILE is finished!';

Die Beispiele sind syntaktisch richtig, aber das Semikolon hinter dem ersten WHILE ist leicht zu übersehen. Eine Kontrollstruktur zu programmieren, die keinen Block benötigt, ist vielleicht möglich, aber so sollte nicht programmiert werden. Es ist hier besser einen leeren Block hinter die WHILE-Schleife zu platzieren.

Gültig
   while ($row = mysql_fetch_assoc($result))
   {
      // empty
   }

   echo 'WHILE is finished!';

Hier wird sofort ersichtlich, dass die WHILE-Schleife keine Verarbeitung enthält und nur die Datensätze der Datenbank durchlaufen werden. Wenn es irgendwie geht, sollte man solche leeren Blöcke vermeiden.

Zitat aus den "phpBB Coding Guidelines"
Always include the braces:
This is another case of being too lazy to type 2 extra characters causing problems with code clarity. Even if the body of some construct is only one line long, do not drop the braces. Just don't, (..)

Auch die "phpBB Coding Guidelines" verbieten es, die Klammern um Blöcke wegzulassen. Es passiert einfach zu schnell, dass man beim Überfliegen von Code etwas übersieht, wenn die Zeile nicht richtig eingerückt ist oder die Klammern fehlen.

Ungültig
   if (15 > 9)
      $boolean = TRUE;
   else
      $boolean = FALSE;

Die untenstehende Version mit Klammern hat den Vorteil, dass man weitere Anweisungen hinzufügen kann. Wenn man sich ganz sicher ist, dass nie weitere Funktionen oder Befehle hinzukommen, kann man auch direkt den Trinitäts-Operator verwenden.

Gültig
   if (15 > 9)
   {
      $boolean = TRUE;
   }
   else
   {
      $boolean = FALSE;
   }

   // or simply write:
   $boolean = (15 > 9);

Diese Empfehlung könnte auch eine Regel sein, aber da die Art und Weise der Klammerseztung umstritten ist, bleibt es eine Empfehlung. Es sei jedem Team jedoch wärmstens ans Herz gelegt, diese Empfehlung nicht zu ignorieren.