PHP Coding Standard |
Zum Einrücken von Quellcode werden Tabulatoren, keine Leerzeichen verwendet. Wie bei der Klammersetzung, gehen auch hier die Meinungen auseinander. Verwendet man Leerzeichen, sieht der Code für alle Entwickler gleich aus. Jedoch nimmt es jedem Entwickler die Möglichkeit, "sein eigenes Bild" vom Quellcode zu gestalten. Die einen mögen 2 Leerzeichen, die anderen 4. Wird der Quelltext mit Tabulatoren eingerückt, kann jeder Entwickler seinen Editor beliebig (der eigenen Präferenz nach) einstellen. Editoren wie jEdit unterstützen sogar für jedes Dateiformat eigene Regeln zum Einrücken. Denkbar wäre für PHP eine Einstellung mit 4 Leerzeichen und für Perl nur 2, wobei in beiden Fällen keine "echten" Leerzeichen abgespeichert werden, sondern Tabulatoren.
Schwierig wird es, wenn es um Abstände im Code oder in den Kommentaren geht. Man sollte hier eher Leerzeichen verwenden oder es ganz sein lassen. Die folgende Beispiele enthalten Leerzeichen, die nicht mit Tabulatoren gemacht werden sollten.
$i = 0; $long_name = 'some string'; $length = 10;
Erstens würde ein Standard-Editor (Notepad, VI, nano, emacs, etc.) mit Tabulatoren-Größe=8 daraus sehr lange Zeilen machen. Zweitens erschweren diese Strukturen das Refactoring.
Beispiel: "$long_name" wird im ganzen Quellcode umbenannt in "$long_variable_name", dann würden die Abstände an dieser Stelle nicht mehr stimmen, und die Gleichheitszeichen nicht mehr untereinander stehen. Es gibt hier nur zwei Wahlmöglichkeiten: Abstände weglassen oder sie konsequent beim Refactoring wieder richtig einstellen. Da dem Refactoring sowieso viel zu wenig Beachtung geschenkt wird, sollten alle Behinderungen - also auch diese Leerzeichen - weglassen werden.
/** * This function creates a RDBMS connection (mysql_connect) and * selects a database (mysql_select_db). Returns TRUE or FALSE. * * @param string $host: RDBMS/MySQL host, e.g. "localhost" * @param string $user: MySQL user, e.g. "mysql_user_cvb" * @param string $password: MySQL password, e.g. "topsecret" * @param string $database: MySQL database, e.g. "mysql_database_cvb" * @return boolean $connection_successfull: TRUE or FALSE */ function connect_rdbms_select_database($host, $user, $password, $database) (...)
Bei den Beschreibungen einer Funktion sind zusätzliche Leerzeichen wichtig, um klar die Art ("@param") vom Rest abzusetzen. Das Problem beim Refactoring wird natürlich auch hier auftreten, aber die Dokumentation auf diese Weise hat sich sowohl in Java, als auch PHP etabliert.
"Tabs. vs. Spaces" ist unter Programmierern eine der größten Debatten aller Zeiten. Wenn man Tabulatoren benutzt, gibt es automatisch Probleme, die man mit Leerzeichen nicht hat. Die Übernahme mit Coppy&Paste in ein Forum oder eine Mail zum Beispiel, wo die Länge automatisch auf 8 Zeichen gesetzt wird. Aber in meinen Augen überwiegen die Vorteile, wenn man Tabulatoren (und nicht Leerzeichen) verwendet.