PHP Coding Standard

Logo: PHP
21. Regel 18: Keine magischen Zahlen

Magische Zahlen sind vielen Programmierern unter dem Begriff "magic numbers" bekannt. Für die Programmierung gilt: No magic numbers!

"27" kann zum Beispiel eine magische Zahl sein, wenn sie im Source-Code auftaucht, ohne das damit gerechnet oder sie als Index verwendet wird. Sie gilt als magisch, weil kein Fremdprogrammierer weiß, wofür sie gedacht ist. Und nach ein paar Monaten weiß es der Originalautor wahrscheinlich auch nicht mehr.

Ungültig
   $end_of_days = (27 == $foo) ? start_launch_sequence() : make_peace();
   $lv = (2 == $p) ? mkid(7) : mkid(12);
   if (9 != $p) ...

Die Zeilen zwei und drei stammen aus einem realen Skript, dass ich debuggen musste. Hier wird niemand auf Anhieb die Variablen oder die magischen Zahlen entschlüsseln können.

Es ist egal, ob ein logisches Konzept hinter den Zahlen steckt, oder ob sich der Programmierer ein kryptisches System ausgedacht hat ... magische Zahlen sollten mit "define()" zu aussagekräftigen Konstanten verwandelt werden.

Gültig
   define('TERRORISTS_WENT_CRAZY', 27);
   $end_of_days = (TERRORISTS_WENT_CRAZY == $foo) ? start_launch_sequence() : make_peace();

Nun ist die magische Zahl einer klaren, sprechenden Bedingung zugeordnet, die ohne Zweifel besser zu identifizieren und zu lesen ist.