Frage zu Stringliteralen

Frage zu Stringliteralen

am 19.10.2006 09:24:36 von Karsten Wutzke

Hallo, was ist besser bei Stringliteralen. Ich sehe soo häufig die
Verwendung von einfachen Hochkommata, kann diesen Stil aber nicht so
ganz teilen...

Also: Lieber ' ' oder " " und warum?

Um die Diskussion mal in Gang zu bringen aus der Referenz meines
falschen Ursprungspostings anhand echo (Verweis von W. Fellner):
http://groups.google.com/groups?as_umsgid=3Defs0md$71g$1@onl ine.de

1 echo "blah " . $string;
2 echo 'blah ' . $string;

3 echo "blah ", $string;
4 echo 'blah ', $string;

5 echo "blah $string";
6 echo 'blah $string'; (<- ?)

Über die Zeit bin ich dazu übergegangen Nr. 5 zu verwenden, da es
insgesamt nur zwei " " benötigt und am einfachsten zu benutzen/tippen
ist, da es auch keinen weiteren Concat-Operator '.' oder ',' erfordert.
Desweiteren habe ich oft Strings a la "Karsten's age is $age.". Mit
einfachen Hochkommata muss ich sonst immer rumwürgen, somit ist für
mich 2., 4. und 6. grundsätzlich eine eher schlechte Wahl.

Benutzung von Kommata ',' als Concat-Operator iss ja eher C oldskool.
Die Benutzung hängt wohl eher davon ab, ob einer eher printf()-style
programmiert oder sich für echo-style entschieden hat. Ich bin ein
echoer, also fallen 3. (+ 4. doppelt s.o.) für mich weg, solange ich
keine variablen Arglists (*printf-Funktionen) verwenden muss.

Es bleiben 1. und 5.

Innerhalb von 5. (bzw. 6) gehen ja ohne Concat-Operator keine
Funktionsaufrufe oder? In diesem Falle sollte zum Ausweichen entweder
eine neue Variable erstellen, die die richtige Formatierung enthält
(meist String) oder man muss eben auf 1. - 4. (hier 1.) ausweichen.

Noch ein Argument gegen einfache Hochkommata ist die Verwendung von
SQL. Dort wird ja fast immer mit einfachen Hochkommata gearbeitet:

"INSERT INTO Contact fname=3D'Hans', lname=3D'Meier', ..."

Mein Fazit: Strings immer in doppelte Hochkommata, Stil 5 der
Einfachheit halber (z.B. für Debugging echoes), Stil 1 bei
Involvierung von Funktionsaufrufen...

Gibt's nochn paar reale Argumente für oder gegen andere Stile?

Karsten

PS: Ich behaupte nicht, dass ich richtig liege... kann aber gut sein ;-)

Re: Frage zu Stringliteralen

am 19.10.2006 10:36:52 von GreenRover

Karsten Wutzke schrieb:
> Hallo, was ist besser bei Stringliteralen. Ich sehe soo häufig die
> Verwendung von einfachen Hochkommata, kann diesen Stil aber nicht so
> ganz teilen...
Alles was in " steht, wird auf Sonderzeichen wie \n \r \t usw, auf
Variablen $foo, nicht mit konstanten verwechseln, auf die wird nicht
gephrast, aber array wie $foo['baa'] wobei du die mit {} also " dfdf
{$foo['baa']} " markieren musst.


Naja und 'geben einfach nur den Inhalt wieder ohne irgend welche Umwandlung.

Und noch ein grundsätzlicher Unterschied ist ein rechter Performance
Gewinn bei Nutzung von ' anstatt ".

Also würde ich die " nur nutzen, wenn es sich wirklich lohnen würde.

PS für lange Texte, kann man anstatt
$foo = " fsgfsdfg";
auch
$foo = << text
text
text
text
EOF;

verwenden.

Re: Frage zu Stringliteralen

am 19.10.2006 11:05:08 von Ulf Kadner

Karsten Wutzke schrieb:

> Hallo, was ist besser bei Stringliteralen.

Alles! :-)

> Verwendung von einfachen Hochkommata, kann diesen Stil aber nicht so
> ganz teilen...

Dein Problem...

> Also: Lieber ' ' oder " " und warum?

Alles in Doublequotes wird nocheinmal geparst, alles in Singelquotes nicht.

> 1. echo "blah " . $string;

Sinnfrei, es besteht kein Grund blah zu parsen

> 2. echo 'blah ' . $string;

Shon besser aber eine unnötige Aktion durch Stringverkettung (der .)

> 3. echo "blah ", $string;

Siehe 1.

> 4. echo 'blah ', $string;

Optimal. Keine extra verkettungen, kein zusätzliches Parsen

> 5. echo "blah $string";

Eher suboptimal

> 6. echo 'blah $string'; (<- ?)

gibt genau 'blah $string' aus (ohne Singlequotes)

> Über die Zeit bin ich dazu übergegangen Nr. 5 zu verwenden, da es

Man kann dazu keine generell gültige Antwort geben. Wenn mehrere
Verkettungen notwendig sind nutzt man z.B: (s)printf zum Formatieren
echo nimmt hier schon eine Sonderstellung ein.

> insgesamt nur zwei " " benötigt und am einfachsten zu benutzen/tippen

Das ist irrelevant. Wenn es Dir um best Praktices geht dann solltest Du
nicht Deine Angewohnheiten zugrunde legen! :-)

> ist, da es auch keinen weiteren Concat-Operator '.' oder ',' erfordert.

Is aber wesentlich langsamer als 1-4 (in der Menge)

> Desweiteren habe ich oft Strings a la "Karsten's age is $age.". Mit
> einfachen Hochkommata muss ich sonst immer rumwürgen, somit ist für
> mich 2., 4. und 6. grundsätzlich eine eher schlechte Wahl.

Was für ein Argument! Es kommt natürlich immer auf vorliegende
Gegebeneheiten an.

> Benutzung von Kommata ',' als Concat-Operator iss ja eher C oldskool.

Das Komma hat nichts mit Verkettung zu tun! Es ist nur eine einfache
möglichkeit nicht jedesmal echo schreiben zu müssen.

Eine Verkettung (also .) stellt eine zusätzliche operation dar.

> Die Benutzung hängt wohl eher davon ab, ob einer eher printf()-style
> programmiert oder sich für echo-style entschieden hat.

Auch das ist falsch. (s)printf sollte immer dann genutzt werden wenn man
mehrere Verkettungen vermeiden will. (= Performance verbessern)

> Innerhalb von 5. (bzw. 6) gehen ja ohne Concat-Operator keine
> Funktionsaufrufe oder?

Innerhalb eines Strings sind Funktionsaufrufe generell ausgeschlossen
(wenn man mal eval() aussen vor läßt) Dafür muss man sich den String aus
mehrenen Element halt passend zusammen bauen

> Noch ein Argument gegen einfache Hochkommata ist die Verwendung von
> SQL. Dort wird ja fast immer mit einfachen Hochkommata gearbeitet:

Das ist kein generelles Argument gegen Singlequotes. Aber für kurze
SQL-Statements ists wohl am besten mit Doublequotes zu handhaben.

Länger Statements pack ich immer in einen heredoc-String

$sql = << CREATE TABLE xyz (
id INT(11),
abc CHAR(24),
...
)
SQL;

> Mein Fazit: Strings immer in doppelte Hochkommata,

Sicher nicht. 90% meines Codes enthält ausschlieslich Singlequotes für
Strings. Beide haben Vor und Nachteile und unterschiedliche Einsatzgebiete.

MfG, Ulf

Re: Frage zu Stringliteralen

am 19.10.2006 11:10:33 von Claus Reibenstein

Karsten Wutzke schrieb:

> Hallo, was ist besser bei Stringliteralen. Ich sehe soo häufig die
> Verwendung von einfachen Hochkommata, kann diesen Stil aber nicht so
> ganz teilen...
>
> Also: Lieber ' ' oder " " und warum?

Das hängt davon ab, was mit dem String passieren soll: Wenn er einfach
nur so, wie er ist, weiterverwendet werden soll, sind die einfachen
Hochkommata die bessere, weil schnellere Lösung. Wenn er jedoch erst
noch geparst werden muss, um z.B. $variablen oder S\teuerzeiche\n zu
ersetzen, wirst Du um "" nicht herumkommen.

> 1. echo "blah " . $string;

Hier sind die "" unsinnig, weil vor der Ausgabe der PHP-Interpreter
diesen String erst noch unnötigerweise parst. Außerdem werden erst die
beiden Teilstrings zu einem Gesamtstring verknüpft und dann dieser
Gesamtstring ausgegeben, was bei echo ziemlich unsinnig ist.

> 2. echo 'blah ' . $string;

Schon etwas besser, aber noch nicht perfekt: es wird immer noch erst ein
Gesamtstring zusammengebaut.

> 3. echo "blah ", $string;

Hier ist der Zusammenbau entfallen, die beiden Teilstrings werden
einzeln ausgegeben. Allerdings wird der erste immer noch unnötigerweise
geparst.

> 4. echo 'blah ', $string;

Das dürfte die beste Lösung sein: kein Parsen, keine Stringverkettung,
einfach beide Strings nacheinander ausgeben.

> 5. echo "blah $string";

Das ist in vielen Fällen meine bevorzugte Lösung, da sie am einfachsten
zu handhaben ist. Vor allem bei komplexeren Strings halte ich diese
Version oft für besser lesbar. Allerdings ist es nicht unbedingt die
beste, da der gesamte String geparst werden muss. Hier muss man abwägen.

> 6. echo 'blah $string'; (<- ?)

Diese Anweisung ist schnell und korrekt, wird aber möglicherweise nicht
das gewünschte Ergebnis liefern. Andererseits zeigt sie wunderbar den
Unterschied zwischen '' und "" auf.

> Über die Zeit bin ich dazu übergegangen Nr. 5 zu verwenden, da es
> insgesamt nur zwei " " benötigt und am einfachsten zu benutzen/tippen
> ist, da es auch keinen weiteren Concat-Operator '.' oder ',' erfordert.

',' ist kein "Concat-Operator", sondern einfach nur ein Trenner zwischen
zwei Argumenten (echo kann beliebig viele Argumente haben). Im Gegensatz
zu '.' erfolgt also keine Verkettung der Teilausdrücke, sondern die
Ausdrücke werden unabhängig voneinander ausgewertet und die
Teilergebnisse nacheinander ausgegeben.

> Desweiteren habe ich oft Strings a la "Karsten's age is $age.". Mit
> einfachen Hochkommata muss ich sonst immer rumwürgen, somit ist für
> mich 2., 4. und 6. grundsätzlich eine eher schlechte Wahl.

Das solltest Du von Fall zu Fall entscheiden.

> Benutzung von Kommata ',' als Concat-Operator iss ja eher C oldskool.

Auch in C war das nie ein "Concat-Operator". C kennt gar keinen Operator
zur Verknüpfung von Strings.

> Die Benutzung hängt wohl eher davon ab, ob einer eher printf()-style
> programmiert oder sich für echo-style entschieden hat.

Es hängt davon ab, was mit dem String zu geschehen hat. echo und
printf() sind ja nur _zwei_ Möglichkeiten, einen String zu benutzen.

> Es bleiben 1. und 5.

Halte ich nicht für gut. Es sollten 4. und 5. (für echo) bzw. 2. und 5.
(für alle anderen Fälle) übrig bleiben.

> Innerhalb von 5. (bzw. 6) gehen ja ohne Concat-Operator keine
> Funktionsaufrufe oder?

Richtig. Ein String in "" kann nur Variablen oder Feldelemente (mit
Einschränkungen) oder Steuerzeichen in \-Schreibweise enthalten.

> In diesem Falle sollte zum Ausweichen entweder
> eine neue Variable erstellen, die die richtige Formatierung enthält
> (meist String) oder man muss eben auf 1. - 4. (hier 1.) ausweichen.

Bei echo kannst Du 3. und 4. verwenden. In anderen Fällen wirst Du auf
1. oder 2. ausweichen müssen.

> Noch ein Argument gegen einfache Hochkommata ist die Verwendung von
> SQL. Dort wird ja fast immer mit einfachen Hochkommata gearbeitet:
>
> "INSERT INTO Contact fname='Hans', lname='Meier', ..."

Das ist korrekt. Außerdem kommen solche Strings in praktischen
Anwendungen i.d.R. aus irgendwelchen Variablen, sodass Du mit "" hier
sowieso besser fährst.

> Mein Fazit: Strings immer in doppelte Hochkommata, Stil 5 der
> Einfachheit halber (z.B. für Debugging echoes), Stil 1 bei
> Involvierung von Funktionsaufrufen...

Mein Fazit: je nach Anwendungsfall '' oder "" verwenden.

> Gibt's nochn paar reale Argumente für oder gegen andere Stile?

Reichen die fürs erste? :-)

Gruß. Claus

Re: Frage zu Stringliteralen

am 19.10.2006 12:24:26 von Karsten Wutzke

Claus Reibenstein schrieb:

> Karsten Wutzke schrieb:
>
> > Hallo, was ist besser bei Stringliteralen. Ich sehe soo häufig die
> > Verwendung von einfachen Hochkommata, kann diesen Stil aber nicht so
> > ganz teilen...
> >
> > Also: Lieber ' ' oder " " und warum?
>
> Das hängt davon ab, was mit dem String passieren soll: Wenn er einfach
> nur so, wie er ist, weiterverwendet werden soll, sind die einfachen
> Hochkommata die bessere, weil schnellere Lösung. Wenn er jedoch erst
> noch geparst werden muss, um z.B. $variablen oder S\teuerzeiche\n zu
> ersetzen, wirst Du um "" nicht herumkommen.
>
> > 1. echo "blah " . $string;
>
alle Argumente gesnippt
>
> > 6. echo 'blah $string'; (<- ?)
>
> Diese Anweisung ist schnell und korrekt, wird aber möglicherweise nicht
> das gewünschte Ergebnis liefern. Andererseits zeigt sie wunderbar den
> Unterschied zwischen '' und "" auf.
>

Eine sehr gute Analyse des ganzen, Danke dafür. Ich bin "enlighted"
(oder besser 'enlighted'). ;-)

> > Über die Zeit bin ich dazu übergegangen Nr. 5 zu verwenden, da es
> > insgesamt nur zwei " " benötigt und am einfachsten zu benutzen/tippen
> > ist, da es auch keinen weiteren Concat-Operator '.' oder ',' erfordert.
>
> ',' ist kein "Concat-Operator", sondern einfach nur ein Trenner zwischen
> zwei Argumenten (echo kann beliebig viele Argumente haben). Im Gegensatz
> zu '.' erfolgt also keine Verkettung der Teilausdrücke, sondern die
> Ausdrücke werden unabhängig voneinander ausgewertet und die
> Teilergebnisse nacheinander ausgegeben.
>

su.

> > Desweiteren habe ich oft Strings a la "Karsten's age is $age.". Mit
> > einfachen Hochkommata muss ich sonst immer rumwürgen, somit ist für
> > mich 2., 4. und 6. grundsätzlich eine eher schlechte Wahl.
>
> Das solltest Du von Fall zu Fall entscheiden.
>

Ja oft zum Debuggen gut geeignet find ich. Das sind meist eh nur temp
echos, die in der Endversion eh auskommentiert werden...

> > Benutzung von Kommata ',' als Concat-Operator iss ja eher C oldskool.
>
> Auch in C war das nie ein "Concat-Operator". C kennt gar keinen Operator
> zur Verknüpfung von Strings.
>

Oha erwischt. Aber das mit dem Komma wusst ich noch net, schon ganich
im Zusammenhang mit echo.

> > Die Benutzung hängt wohl eher davon ab, ob einer eher printf()-style
> > programmiert oder sich für echo-style entschieden hat.
>
> Es hängt davon ab, was mit dem String zu geschehen hat. echo und
> printf() sind ja nur _zwei_ Möglichkeiten, einen String zu benutzen.
>
> > Es bleiben 1. und 5.
>
> Halte ich nicht für gut. Es sollten 4. und 5. (für echo) bzw. 2. und =
5
> (für alle anderen Fälle) übrig bleiben.
>
> > Innerhalb von 5. (bzw. 6) gehen ja ohne Concat-Operator keine
> > Funktionsaufrufe oder?
>
> Richtig. Ein String in "" kann nur Variablen oder Feldelemente (mit
> Einschränkungen) oder Steuerzeichen in \-Schreibweise enthalten.
>
> > In diesem Falle sollte zum Ausweichen entweder
> > eine neue Variable erstellen, die die richtige Formatierung enthält
> > (meist String) oder man muss eben auf 1. - 4. (hier 1.) ausweichen.
>
> Bei echo kannst Du 3. und 4. verwenden. In anderen Fällen wirst Du auf
> 1. oder 2. ausweichen müssen.
>
> > Noch ein Argument gegen einfache Hochkommata ist die Verwendung von
> > SQL. Dort wird ja fast immer mit einfachen Hochkommata gearbeitet:
> >
> > "INSERT INTO Contact fname=3D'Hans', lname=3D'Meier', ..."
>
> Das ist korrekt. Außerdem kommen solche Strings in praktischen
> Anwendungen i.d.R. aus irgendwelchen Variablen, sodass Du mit "" hier
> sowieso besser fährst.
>
> > Mein Fazit: Strings immer in doppelte Hochkommata, Stil 5 der
> > Einfachheit halber (z.B. für Debugging echoes), Stil 1 bei
> > Involvierung von Funktionsaufrufen...
>
> Mein Fazit: je nach Anwendungsfall '' oder "" verwenden.
>

Mein überarbeitetes Fazit:
Meist " ", ich bins zu sehr gewohnt " " zu verwenden, so wird da wohl
der Überhang entstehen (wohlgemerkt nur zum Entwickeln, nicht in der
final version).

Alles was temp strings sind und debug stuff wird "Blabla =3D '$foo' and
rest is '$bar' sdfgth", alle strings, die auf ein array-Element
zugreifen werden definitiv ' ', da dort eh (fast) nie was geparst wird.
Umstellung auf sprintf bei Mehrfachconcats (z.B. Stringgenerierung),
Umstellung auf ',' bei Mehrfachechos. Heredoc-Verwendung bei langen
Texten wie z.B. SQL-Statements, Vorteil dabei auch: Man kann das
Statement 1:1 aus dem Code ziehen und in eine andere Sprache bzw. ein
anderes Programm pasten ohne immer diese " " rauslöschen zu müssen.

Ahm hab ich was vergessen? So wie ich Euch kenne bestimmt... ;-)

> > Gibt's nochn paar reale Argumente für oder gegen andere Stile?
>
> Reichen die fürs erste? :-)
>=20

Auf jeden Fall!

> Gruß. Claus

Gruß zurück
Karsten

Re: Frage zu Stringliteralen

am 19.10.2006 21:41:44 von Claus Reibenstein

Karsten Wutzke schrieb:

> Eine sehr gute Analyse des ganzen, Danke dafür. Ich bin "enlighted"
> (oder besser 'enlighted'). ;-)

Weder noch: Es heißt enlightened ;-)

> Oha erwischt. Aber das mit dem Komma wusst ich noch net, schon ganich
> im Zusammenhang mit echo.

Jetzt weißt Du's :-)

Gruß. Claus