Doppelte oder einfache Anführungszeichen
Gustav Gans
- php
0 bleicher0 dedlfix1 Klawischnigg0 Deus Figendi1 dedlfix0 Klawischnigg1 dedlfix
Moin!
Mir ist klar, was der Unterschied ist, ob ein String in einfachen oder doppelten Anführungszeichen steht.
Was ich gerne wissen würde ist, ob es irgend einen Vorteil hat, bei der Zuweisung von Variablenwerten und bei der Übernahme von Variablenwerten eines der beiden zu verwenden und wenn ja, warum das besser ist.
Also soll man besser
$variable="foo";
oder
$variable='foo'
verwenden? Und bei der Variablenübernahme - soll man da
echo"<p>Die Eingabe war ".htmlspecialchars($_POST["action"]).".</p>\n";
oder besser
echo"<p>Die Eingabe war ".htmlspecialchars($_POST['action']).".</p>\n";
schreiben? Oder ist das völlig egal? Was ist die besserere/schönerere/professionellere Art? Gibt es einen Unterschied nur in der Zeit der Verarbeitung oder spielt da auch ein Sicherheitsaspekt eine Rolle?
Danke und LG
Gustav Gans
Grüße
Also soll man besser
$variable="foo";
oder
$variable='foo'
hier sind '' besser, die werden nciht geparst, was hier auch nciht nötig ist
ob die strings in assozArraysKeynamen auch geparst werden, zweffle ich an, kannst aber ncioh überprüfen - wenn nciht dann ist es wurst^^
MFG
bleicher
Hi,
ob die strings in assozArraysKeynamen auch geparst werden, zweffle ich an
Doch, natürlich werden sie.
MfG ChrisB
Grüße,
ob die strings in assozArraysKeynamen auch geparst werden, zweffle ich an
Doch, natürlich werden sie.
MfG ChrisB
dann gilt das o.g. auch für arraykeys.
MFG
bleicher
Hi!
Mir ist klar, was der Unterschied ist, ob ein String in einfachen oder doppelten Anführungszeichen steht.
Was ich gerne wissen würde ist, ob es irgend einen Vorteil hat, bei der Zuweisung von Variablenwerten und bei der Übernahme von Variablenwerten eines der beiden zu verwenden und wenn ja, warum das besser ist.
Außer dem funktionalen Unterschied gibt es keinen weiteren praktisch relevanten.
Man kann zwar einen Laufzeitunterschied zwischen '' und "" messen, der ist aber so gering, dass er erst bei sehr vielen Verarbeitungen/Wiederholungen in spürbare Regionen kommt. Das macht man ja nicht einfach so, sondern um Daten zu verarbeiten. Bei dieser Anzahl hat man also auch jede Menge Daten zu bewältigen, was ungleich mehr Zeit beansprucht.
Gibt es einen Unterschied nur in der Zeit der Verarbeitung oder spielt da auch ein Sicherheitsaspekt eine Rolle?
Ob '' oder "", das Ergebnis ist immer ein String im Arbeitsspeicher. Auch die einzufügenden Variablen sind bereits solche. Wenn sich das ausnutzen lassen sollte, so hat man schon allein durch seine Eingabe die Möglichkeit, in den Arbeitsspeicher zu gelangen und ist eher nicht auf deine Verarbeitung angewiesen, wenn nicht gerade PHP selbst einen Bug hat, den du zufälligerweise triffst. Mir ist bis jetzt jedenfalls nicht zu Ohren gekommen, dass Strings an sich unmittelbare sicherheitsrelevanten Auswirkungen hätten. Die weitere Verarbeitung, insbesondere das Einfügen in andere Kontexte steht auf einem anderen Blatt.
Lo!
Hi there,
Also soll man besser
$variable="foo";
oder
$variable='foo'
verwenden?
Ich verwende prinzipiell nur ' als Begrenzer für PHP-Strings, weil ich die Verwendung von Variablen innerhalb der Strings für extrem schlechten Stil halte, ausserdem kommt das Syntaxhighlighting meines (und vermutlich auch jedes anderen) Editor damit nicht klar...
Ich verwende prinzipiell nur ' als Begrenzer für PHP-Strings, weil ich die Verwendung von Variablen innerhalb der Strings für extrem schlechten Stil halte, ausserdem kommt das Syntaxhighlighting meines (und vermutlich auch jedes anderen) Editor damit nicht klar...
Dito, das geht so weit dass ich eine ganze Weile
echo ('Dies ist'."\n".'ein Zweizeiler');
verwendet habe. Inzwischen gewöhne ich mir mehr und mehr an einfach über mehrere Zeilen hinweg zu schreiben:
echo ('Dies ist
ein Zweizeiler');
Wobei ich davon abweiche wenn es der Lesbarkeit des Codes dienlich ist:~~~php
if ($var >= 1) { echo 'eins'. "\n"); }
if ($var >= 2) { echo 'zwei'. "\n"); }
if ($var >= 3) { echo 'drei'. "\n"); }
if ($var >= 4) { echo 'vier'. "\n"); }
if ($var >= 5) { echo 'fünf'. "\n"); }
if ($var >= 6) { echo 'sechs'."\n"); }
Hier würden Umbrüche im String einfach das Code-Bild stören, bei solch einzeiligen Kommandos. Eine störende "Leerzeile" würde dazwischen stehen, die nur
');}
enthält.
--
sh:( fo:| ch:? rl:( br:& n4:& ie:{ mo:} va:) de:µ\_de:] zu:) fl:( ss:| ls:[ js:(
Hi there,
[...]Hier würden Umbrüche im String einfach das Code-Bild stören, bei solch einzeiligen Kommandos. Eine störende "Leerzeile" würde dazwischen stehen, die nur ');} enthält.
Ja, ein gut strukturierter Code ist Dein Freund, vor allem aber nicht nur, wenn man nach ein paar Jahren Verbesserungen anbringen möchte...;)
Hello,
echo ('Dies ist'."\n".'ein Zweizeiler');
müsste ja eigentlich für HTTP/HTML auch lauten:
echo ('Dies ist'."\r\n".'ein Zweizeiler');
Und weil das Schreiben von "\r\n" ziemlich lästig ist, schreibe ich lieber
echo ('Dies ist'.CRLF.'ein Zweizeiler');
und habe mir die Konstante CRLF vorher definiert.
Und wenn ich mal ganz faul bin, nenne ich die Kontante einfach nur 'N'. :-))
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hallo,
und habe mir die Konstante CRLF vorher definiert.
Und wenn ich mal ganz faul bin, nenne ich die Kontante einfach nur 'N'. :-))
Für den Zeilenumbruch hat PHP bereits eine eingebaute Konstante: PHP_EOL ;-)
Hello,
und habe mir die Konstante CRLF vorher definiert.
Und wenn ich mal ganz faul bin, nenne ich die Kontante einfach nur 'N'. :-))
Für den Zeilenumbruch hat PHP bereits eine eingebaute Konstante: PHP_EOL ;-)
Ist das nicht der Zeilenumbruch des Quellsystems? Der wäre dann abhängig vom OS, auf dem PHP läuft.
Wir benötigen hier aber definiert CR LF also 0x0D 0x0A
Ich hab jetzt leider keine Zeit mehr, es zu überprüfen, und das Manual gibt da auch nicht viel her. Aber nachher ...
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hi!
Für den Zeilenumbruch hat PHP bereits eine eingebaute Konstante: PHP_EOL ;-)
Ist das nicht der Zeilenumbruch des Quellsystems? Der wäre dann abhängig vom OS, auf dem PHP läuft.
Ja.
Wir benötigen hier aber definiert CR LF also 0x0D 0x0A
Theoretisch ja, praktisch ist das zu vernachlässigen. Ist dir schon einmal ein Browser begegnet, der aufgrund von Nicht-CRLF-Zeilenumbrüchen falsch gearbeitet hat?
Lo!
Hello,
Für den Zeilenumbruch hat PHP bereits eine eingebaute Konstante: PHP_EOL ;-)
Ist das nicht der Zeilenumbruch des Quellsystems? Der wäre dann abhängig vom OS, auf dem PHP läuft.Ja.
Wir benötigen hier aber definiert CR LF also 0x0D 0x0A
Theoretisch ja, praktisch ist das zu vernachlässigen. Ist dir schon einmal ein Browser begegnet, der aufgrund von Nicht-CRLF-Zeilenumbrüchen falsch gearbeitet hat?
Zum Glück nicht. :-)
Aber alle Browser, die ich bisher kenne, stellen unvollständige Zeilenumbrüche richtig (ergänzen sie zu CR LF), soweit man das feststellen kann. Wirklich sehen kann man das nur in der Textarea, aber ich möchte jetzt mal die vage Behauptung aufstellen, dass sie das im Inner-HTML auch tun. Das müsste man doch eigentlich mit JavaScript feststellen können?
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hi!
ausserdem kommt das Syntaxhighlighting meines (und vermutlich auch jedes anderen) Editor [mit Variablen in ""-Strings] nicht klar...
Falsch vermutet. Notepad++ hat keine Probleme damit (definiere "nicht klarkommen" genauer). IDEs wie PDT für Eclipse oder Zend Studio sind ebenfalls in der Lage diese Besonderheit PHPs korrekt zu erkennen, inklusiver aller Spielarten der komplexen Syntax.
Lo!
Hi there,
Falsch vermutet. Notepad++ hat keine Probleme damit (definiere "nicht klarkommen" genauer).
Damit meine ich, daß eine Variable in einem String nicht erkannt und somit auch farblich nicht als solche markiert wird. Zumindest in meinem Homesite-Editor nicht, für den ich damals hundert Dollar gelegt habe. Daß Notepad++ das kann, finde ich bemerkenswert. Ändert aber auch nicht viel, ich halte es nicht für klug, Variable einfach in einen String 'reinzuschreiben...
Hi!
[...] ich halte es nicht für klug, Variable einfach in einen String 'reinzuschreiben...
In vielen Fällen ist es schon aus sicherheitstechnischen Gründen gar nicht ratsam, Variablen einfach in Strings zu notieren, weil dann die notwendige Behandlung fehlt beziehungsweise nicht angewendet werden kann. Ein vorheriges Behandeln des Variableninhaltes ist auch nicht empfehlenswert, weil das den Ort der benötigten Kontextbehandlung und selbige voneinander trennt, und man so mehrere Blicke benötigt, um die Stelle als sicherheitstechnisch problemlos zu erkennen. Der andere Weg des String-Raus-Rein ist auch nicht unbedingt besser. Ich bevorzuge in dem Fall die Verwendung von (s)printf():
$sql = sprintf("SELECT * FROM table WHERE name='%s' ORDER BY name", mysql_real_escape_string($_GET['name']));
printf('<p>Der Benutzer %s hat sich angemeldet.</p>', htmlspecialchars($benutzerName));
Lo!