Hauptmenü

Untermenü

PHP - Grundlagen - Programmierstile - Zeichenketten

1. Die Möglichkeiten

In PHP gibt es zwei Möglichkeiten, um normale Zeichenketten/Strings mit Variablen zu kombinieren. Entscheidend ist dabei die Art und Weise, womit ihr die Zeichenketten einschließt. Da gäbe es einmal die Anführungszeichen (") und die so genannten Hochkommata ('). Für welches ihr euch entscheidet, ist eigentlich egal, ihr solltet das dann aber konsequent durchziehen. Mal so und mal so ist meiner Meinung nach auf Dauer problematisch bei der Fehlersuche. Beide Varianten haben ihre Vor- und Nachteile.

Die Anführungszeichen

Bei dieser Variante kann man Variablen direkt in eine Zeichenkette hineinschreiben und ihr Wert wird trotzdem erkannt. Ein kleines Beispiel:


<?php
  $hartz_vier 500;
  echo "Ich bekomme jeden Monat $hartz_vier Euro";
?>

Die Hochkommata

Bei dieser Variante werden die Werte von Variablen innerhalb der Zeichenkette nicht mehr erkannt und müssen "separiert" werden. Die Verbindung erfolgt über den so genannten Verknüpfungsoperator, also dem Punkt.


<?php
  $hartz_vier 500;
  // Falsch
  echo 'Ich bekomme jeden Monat $hartz_vier Euro';
  // Richtig
  echo 'Ich bekomme jeden Monat '.$hartz_vier.' Euro';
?>

2. Das Problem

Egal für welche Variante man sich entscheidet, spätestens bei der Ausgabe von HTML- und/oder JavaScript-Code steht man vor einem Problem. Setzt man zum Beispiel bei HTML-Attributen die Anführungszeichen ein oder Hochkommata? Nun, beides ist erlaubt. Aber wie geht man vor?


<?php
  // So?
  echo "<a href=\"bla.htm\" target=\"blank\">$link</a>";
  // Oder so?
  echo "<a href='bla.htm' target='blank'>$link</a>";
?>

NEIN, sage ich

Und bitte, glaubt mir jetzt einfach mal. Die beiden ersten Möglichkeiten sind meiner Meinung nach extrem fehleranfällig und obendrein sehr schlecht zu lesen, weil viele Editoren hier die Variablen optisch nicht hervorheben. Darum solltet ihr euch wirklich das hier angewöhnen:


<?php
  echo '<a href="bla.htm" target="blank">'.$link.'</a>';
?>

Zeichenketten schön in Hochkommata setzen und Variablen über den Verknüpfungsoperator einbinden. Das ist sauber, das ist übersichtlich. Außerdem braucht man sich nicht mehr um die Maskierung der Anführungszeichen kümmern.

Noch ein Argument

... für die Skeptiker und Zweifler. Bei assoziativen Arrays wird der Index ebenfalls entweder in Anführungszeichen oder Hochkommata gesetzt. Nur leider fallen die bei der ersten Schreibweise weg, also eine weitere Fehlerquelle, die euch die Arbeit erschweren kann.


<?php  
  // Unübersichtlich und fehleranfällig
  $monatsgehalt['mai'] = 3000;
  echo "Im Monat Mai betrug mein Gehalt $monatsgehalt[mai] Euro";
  
  // So ist's brav
  $monatsgehalt['mai'] = 3000;
  echo 'Im Monat Mai betrug mein Gehalt '.$monatsgehalt['mai'].' Euro';
?>

3. Mein Tipp

Meidet die Anführungszeichen wie der Teufel das Weihwasser. Das wird euch eure Arbeit erheblich erleichtern und ihr schießt nicht diese Böcke, die man immer wieder in Foren zu Gesicht bekommt.


<?php  
  // Was soll das?
  $bla "$blubb";
  // Und das?
  $bla["$blubb"] = "blubber";
  // Das hier ist ja völliger Tinnef
  $bla['$blubb'] = 'blubber';
?>

Nicht lachen! Ist alles schon vorgekommen. Daher gilt hier ab sofort eine Grundregel:

Grundregel

Variablen werden niemals in Anführungszeichen gesetzt! Wer es trotzdem tut, wird aus der Gemeinschaft der Programmierer ausgeschlossen. Wie all diejenigen, die noch immer mit GOTO arbeiten, wenn es die Sprache erlaubt.

Einzige Ausnahme

Spezielle Formatierungszeichen wie ein Tab (\t) oder Zeilenumbruch (\n bzw. \r\n) werden in Anführungszeichen gesetzt, da sie sonst nicht funktionieren.


<?php
  echo '<a href="bla.htm" target="blank">'.$link.'</a>'."\n";
?>

4. Escapen

Während meine obige Meinung von vielen anderen Entwicklern geteilt wird, so sieht es beim Escapen nicht ganz so eindeutig aus. Ich persönlich mochte es lange Zeit nicht, habe mich mittlerweile aber daran gewöhnt. Darum stelle ich euch nur mal die zwei Möglichkeiten vor und ihr entscheidet selber.

Ohne Escapen


<?php  
  // Ein JavaScript-Code ohne Escapen mit Hochkommata
  echo 'mein_array['."'".$bla."'".'] = '."'".$blubber."';";
  // Ein JavaScript-Code ohne Escapen mit Anführungszeichen
  echo 'mein_array["'.$bla.'"] = '."'".$blubber."'";
  // SQL-Befehl ohne Escapen
  $query 'UPDATE bla SET blubber = '."'".$_POST['blubber']."'";
?>

Mit Escapen


<?php  
  // Ein JavaScript-Code mit Escapen
  echo 'mein_array[\''.$bla.'\'] = \''.$blubber.'\';';
  // SQL-Befehl mit Escapen
  $query 'UPDATE bla SET blubber = \''.$_POST['blubber'].'\'';
?>

zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt