Zeichenketten (strings) lassen sich in PHP bekanntermaßen sowohl in einfachen (‚) als auch doppelten („) Hochkommata einschließen. Aber wissen Sie auch, dass es dabei Unterschiede gibt, welche es sind und wann Sie welche Version am besten einsetzen? Wenn nicht, finden Sie in diesem Beitrag die fehlenden Antworten.
Der Unterschied zwischen Zeichenketten mit einfachen und doppelten Anführungszeichen ist der, dass solche in doppelten Anführungszeichen von PHP während der Ausführung „geparsed“ – also Zeichen für Zeichen durchgegangen und bearbeitet – werden. Damit ist es möglich Sonderzeichen wie Zeilenumbrüche oder Tabualatoren oder sogar Variablen in der Zeichenkette einzutragen, die dann entsprechend ersetzt werden.
$user = "Welt";
print "Hallo, $user!\nWie geht es dir?";
Würde folgendes ausgeben: Hallo, Welt!
Wie geht es dir?
Bei einfachen Anführungszeichen wird die Zeichenkette im Grunde genommen genau so ausgegeben, wie sie eingegeben wurde (abgesehen von den beiden Zeichenkombinationen \‘ und \\).
$user = "Welt";
print 'Hallo, $user!\nWie geht es dir?';
Erzeugt somit folgende Ausgabe: Hallo, $user!\nWie geht es dir?
Weshalb sollte man also nicht gleich alles in doppelte Anführungszeichen setzen? Wieso gibt es überhaupt die „einfache“ Version? Die Antwort ergibt sich aus dem eingangs erwähnten parsen: Jedes Mal wenn die Zeichenkette aufgerufen wird wird Sie bearbeitet. Ganz egal, ob es etwas zu ersetzen gibt oder nicht. Da das ganze sehr schnell geht ist der Unterschied zu dem selben Text in einfachen Anführungszeichen von der Laufzeit her minimal. Wenn wir uns jetzt aber mal vorstellen, dass wir eine umfangreiche Anwendung mit vielen solchen Texte haben, die vielleicht auch noch auf einem gut besuchten Webserver läuft und somit entsprechend oft ausgeführt wird, kann das in Summe schnell meß- oder sogar fühlbare Unterschiede erzeugen.
Wenn also sowieso schon klar ist, dass an einem Text nichts ersetzt werden muss, sollten immer einfache Anführungszeichen verwendet werden.
$Welt = 'Erde';
$Weltraum = 'Universum';
$Weltraumschiff = 'Space Shuttle';
print „Wir fliegen im $Weltraumschiff von der $Welt zum Mars oder gar bis zum Rande des $Weltraums.“;
In diesem Beispiel muss an den Inhalten der drei Variablen nichts ersetzt werden, also kommen Sie in einfache Anführungszeichen und nur für die Ausgabe werden doppelte verwendet, damit die entsprechenden Stellen durch den Inhalt der Variablen ersetzt werden. Doch was wird hier ausgegeben? Wer glaubt es ist Wir fliegen im Space Shuttle zum Mars oder machen eine Flug von der Erde bis zum Rande des Universums., der irrt.
Die eigentliche Ausgabe lautet Wir fliegen im Space Shuttle zum Mars oder machen eine Flug von der Erde bis zum Rande des . Denn alles was nach dem Dollar-Zeichen kommt und ein gültiges Zeichen für einen Variablennamen ist wird als zu der Variablen gehörig interpretiert. Sonst könnte ja $Weltraumschiff
auch als Erderaumschiff oder Universumschiff ausgegeben werden. Zwar kann man mit geschweiften Klammern den gewünschten Effekt erzielen (... "Rande des ${Weltraum}s."
), aus Gründen der Übersichtlichkeit und Eindeutigkeit ist aber immer zu empfehlen Variablen nie direkt in Zeichenketten zu verwenden und nur den Teil der wirklich Sonderzeichen enthält in doppelte Anführungszeichen zu setzen. Für unsere beiden Beispiel bedeutet das
$user = 'Welt';
/*
hier brauchen wir die doppelten Anführungszeichen um den Zeilenumbruch zu erzwingen
*/
print 'Hallo, ' . $user . '!' . "\n" . 'Wie geht es dir?';
$Welt = ‚Erde‘;
$Weltraum = ‚Universum‘;
$Weltraumschiff = ‚Space Shuttle‘;
print ‚Wir fliegen im ‚ . $Weltraumschiff . ‚ von der ‚ . $Welt . ‚ zum Mars oder gar bis zum Rande des ‚ . $Weltraum . ’s.‘;
Das Ausrufezeichen auch noch auszulagern macht aus Laufzeit-Sicht wahrscheinlich keinen Unterschied, allerdings ist dadurch gesichert, dass in den doppelten Anführungszeichen wirklich nur zu ersetzende Zeichen stehen.