PHP Coding Standard

Logo: PHP
14. Regel 11: Auf keinen Fall Abkürzungen verwenden, die zweideutig sein können

Stellen Sie sich vor, Sie finden in einem PHP-Skript die Variable "$back". Man könnte jetzt annehmen, dass diese Variable etwas mit "Zurück" zu tun hat. Mir ist allerdings ein Fall bekannt, wo "back" eine Abkürzung für "Backend" war. Im gleichen Projekt wurde auch die Abkürzung "lan" für "language" verwendet. "LAN" ist jedoch (weltweit) eine Abkürzung für "Local Area Network".

Wenn auch nur ein Mitglied im Team über so etwas "stolpert", geht wertvolle Zeit verloren. Das muss unter allen Umständen vermieden werden. Das man "back" schneller getippt hat als "backend" ist natürlich wahr, aber aus solcher Faulheit - und wir reden hier von vielleicht zwei Sekunden Mehraufwand - können sich fatale Folgen ergeben:

Diese Fälle sind nicht konstruiert, sondern meine Erfahrungen oder die Berichte von Freunden. Um solche Probleme zu umgehen:

Abkürzungen vermeiden
   $group_id = 1;          // instead of $grpid
   $name_length = 20;      // instead of $namLn
   $reset_printer = TRUE;  // instead of $rstprt

Obwohl "group_id" nahezu genauso schnell getippt ist, wie "grpid" werden in vielen PHP-Projekten solche kryptischen Abkürzungen benutzt. Es wäre auch möglich, die Variable "grpid" als "grPID" zu interpretieren. "PID" ist unter Linux/Unix eine bekannte Abkürzung für "Process ID". In genau diesem Fall würde unweigerlich das Rätsel um die Abkürzung "gr" beginnen.

Mehrere Bedeutungen sind möglich
   $tp = termProcess();  // Terminate process or terminal process?
   $stupid = $rst;  // Typo? "$stupid" or "$stop_id"?; $rst == $result or $reset?
   $success = proc();  // "proc()" == processing or procedure?

Abkürzungen wie "RDBMS" können schnell über Google gefunden werden und sind den meisten Personen in der EDV bekannt. Sie können deswegen mit Vorsicht eingesetzt werden. Warum mit Vorsicht? Die Pflicht zur Kleinschreibung macht es noch schwieriger Abkürzungen zu erkennen und richtig zu deuten. Abkürzungen wie "cp" für "copy" dürfen niemals verwendet werden, weil der Aufwand vier anstatt zwei Zeichen zu tippen nahezu identisch ist.

Nehmen wir an, Sie haben die Möglichkeit eine Variable "$terminal_process" oder "$tp" zu nennen. Sie sollten immer die ausführliche Variante wählen, weil Sie mit

solche Variablen nicht immer wieder tippen müssen.

"$x" wird bei mathematischen Programmen und Funktionen verwendet. Das sollte allerdings nur gemacht werden, wenn alle im Team mathematische Kenntnisse haben. Der Variablenname "$extract_a_root" ("to extract a root" = "eine Wurzel ziehen") ist zwar nicht so kurz, aber viel sprechender als "$x". Der Bezeichner "$root" wäre hier wieder verwirrend, weil die Variable auch etwas mit dem Root-Account unter Linux zu tun haben könnte.

Einige Programmierer benutzen Variablen wie "$blnResult" oder "$strName", um den Typ einer Variable zu kennzeichnen. Das ist keine gute Idee, weil einige dieser Abkürzungen einem Programmierneuling nicht bekannt sind und selbst Google und das Wikipedia dazu keine direkten Treffer liefern. "str" ist unter anderem eine Abkürzung für "Straße" oder den Flughafen von Stuttgart. "bln" liefert noch verwirrendere Ergebnisse. Trotzdem werden Abkürzungen sehr häufig von Programmierern verwendet.

Aus Erfahrung weiß ich, dass Programmierer, die sehr intensiv Abkürzungen verwenden, sich nach mehreren Monaten selbst in ihren Source-Code einarbeiten müssen. Immer wieder tauchen Fragen auf: "Dieses '$tp' ... was habe ich mir vor einem Jahr dabei gedacht?". Der PHP Coding Standard sollte das Maß dieser Einarbeitung auf ein Minimum reduzieren.

Ausnahme zu Regel 11: Zählvariablen in Schleifen werden in der Regel mit einem Buchstaben ("$i", "$j", "$k" und so weiter) definiert. Auch Abkürzungen, die in einem Team gebräuchlich sind, können mit Vorsicht eingesetzt werden.