dedlfix: Begriff Magic String

Beitrag lesen

Tach!

für user lesbaren Text gibt es Kombinationen die ein Parser nicht als Magic String erkennt und diese Kombination so ohne Veränderung ausgibt.

Der Begriff Magic String steht bereits für etwas anderes. Gemeint sind damit Stringliterale im Code, mit denen ein bestimmter Effekt erreicht werden kann, vorausgesetzt man kennt den Wert. Zudem weiß man nie, ob zwei gleiche Strings an unterschiedlichen Stellen auch dasselbe meinen. Besser ist es, Konstanten zu definieren, denen man einen sprechenden Namen geben kann. Wenn zwei gleiche Strings für unterschiedliche Dinge stehen, kann man das anhand zweier Konstanten sehen. Und falls man einen String ändern muss, ändert man den Wert der Konstanten, statt dass man mit Suchen und Ersetzen auch alle anders gemeinten Bedeutungen ersetzt.

$db = mysqli_connect("127.0.0.1", "test", "test", "test");

In diesem Beispiel gibt es neben der IP-Adresse dreimal den Wert test als Magic Strings. Die Bedeutung ist immer eine andere. Man kann sie nicht aus dem Wert entnehmen. Man muss anhand der Dokumentation der Funktion herausfinden, wofür welcher Wert steht. Mit Konstanten statt Stringliteralen / Magic Strings wird es eindeutig.

define('HOST', '127.0.0.1');
define('USERNAME', 'test');
define('PASSWORD', 'test');
define('DATABASE', 'test');
 
$db = mysqli_connect(HOST, USERNAME, PASSWORD, DATABASE);

Oder

if ($variable == 'D') { ... }

Es ist aus dem Code nicht zu erkennen, wofür hier das D steht. Man muss den Kontext oder den Anwendungsfall kennen. Eine Konstante mit sprechendem Namen wäre verständlicher als der Magic String.

Abgesehen davon kennt die englischsprachige Wikipedia eine weitere Bedeutung für den Begriff.


Du hingegen hast Platzhalter, wenn die Bezeichner direkt nachgeschlagen werden können, oder Template Expressions, wenn der Wert erst noch berechnet werden muss.

dedlfix.