PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : quotes " oder ' !?


flobee
13.01.2004, 10:23:38
hallo
ich stolpere immer wieder über folgende kinderkrankheit oder bin ich das!? :-D
file_exists("$template/table.html") // true
file_exists('$template/table.html') // false

noch besser:
echo "$template"; // = wert
echo '$template'; // = $template

habe ich da was falsch verstanden? ich hab hier irgenwo mal gelesen das esegal ist ob single quotes '' oder double quotes ""

php einstellungen falsch oder zu beachten? da fällt mir auf seit dem ich die globals OFF habe.

chris17
13.01.2004, 10:56:07
Hi flobee,

echo "$template"; // = wert
echo '$template'; // = $template
Ist korrekt, genau so steht' s geschrieben -> http://de3.php.net/manual/de/function.echo.php (Bsp. 1)

feuervogel
13.01.2004, 12:30:02
zwischen doppelten anführungszeichen werden variablen interpoliert <=stichwort

meikel (†)
13.01.2004, 12:32:09
Original geschrieben von flobee
habe ich da was falsch verstanden? ich hab hier irgenwo mal gelesen das esegal ist ob single quotes '' oder double quotes ""
Bei PHP ist das nicht egal. Innerhalb von "string" parst PHP noch enthaltene Variablen, innerhalb von 'string' nicht.

Sowas
echo "$template";
ist allerdings Mumpitz, weil man das so
echo $template;
schreibt.

flobee
13.01.2004, 12:43:14
hi @all

hmmm
ok, bei echo gibts ne erklärung


aber funktionen in funktionen? warum wird denn dort mit den quotes unterschieden? dort gibts keinen header output!?

meikel (†)
13.01.2004, 13:05:57
Original geschrieben von flobee
hmmm
ok, bei echo gibts ne erklärung

aber funktionen in funktionen? warum wird denn dort mit den quotes unterschieden? dort gibts keinen header output!?
So langsam verstehe ich Deine Frage nicht mehr. Was ist daran, daß PHP innerhalb von " " gefundene Variablennamen durch die enthaltenen Werte ersetzt und innerhalb von ' ' nicht, eigentlich so schwer zu verstehen?

MiH
13.01.2004, 13:07:18
file_exists($template.'/table.html') // true

flobee
13.01.2004, 17:05:16
yo! es ist schwer zu verstehen!
da nicht wirklich verständlich gesagt wird das das Sprach-Konstrukt
echo()
überall gilt und damit innerhalb von php funktionen wie z.B file_extists( echo-Sprach-konstrukt-gilt-hier-auch )

für mich war die definition für php-funktionen mit werte übergaben wie folgt:
- benutzerdefinierte angaben müssen in quotes/double quotes
file_exists($template.'/table.html') // true
file_exists($template."/table.html") // true
- dynamisch (variablen) optional in quotes/double quotes; array, objekte, konstanten auf keinen fall (ausser setlocale() php < 4.1)
da ich immer double quotes verwende schien ich bisher auf der sicheren seite zu sein

ich habe eigentl. nie ganz verstanden warum hier unterschieden wird (speziell bei php-funktions aufrufen) und den möglichen grund.

der weiterführender link lässt mir nun aber ein licht aufgehen. u.a. was ich unter dem wort "Sprach-Konstrukt" nun zu verstehen habe!
http://de3.php.net/manual/de/functions.variable-functions.php

danke an alle! :-)

flobee

meikel (†)
13.01.2004, 17:36:52
Original geschrieben von flobee
yo! es ist schwer zu verstehen!

[1]da ich immer double quotes verwende schien ich bisher auf der sicheren seite zu sein

[2]ich habe eigentl. nie ganz verstanden warum hier unterschieden wird (speziell bei php-funktions aufrufen) und den möglichen grund.

1. wenn Du wüßtest, was der Parser für einen Heidenaufriß veranstaltet, wenn er auf mit " " eingerahmte Strings trifft ("nu such alles, was eine Variable sein könnte!"), würdest Du schon um der Perfomance willen so oft wie möglich Deine Strings in ' ' einrahmen.

2. betrachte bei PHP die " " als Sonderfall und verwende überall dort, wo sich keine Variablenplatzhalter innerhalb von Strings befinden die ' '.

Zusatz: PHP kennt auch Konstanten. Immer dann, wenn der Parser im Quelltext auf einen Bezeichner stößt, den der Parser nicht kennt, denkt er logischerweise, es wäre eine Konstante.

$arr[index] <- ist dann falsch, wenn es keine Konstante namens index gibt.
$arr['index'] <- ist richtig, weil der Indexname als Literal übergeben wurde.
$arr["index"] <- ist auch richtig, aber zeitaufwendiger
$arr[$index_name] <- ist richtig, wenn $index nicht leer ist
$arr["$index_name"] <- ist auch richtig, aber zeitaufwendiger
$arr['$index_name'] <- ist falsch oder Unfug. Solche Feldnamen denkt man sich nur im Vollrausch aus...

flobee
13.01.2004, 21:27:55
hey, danke für die info! ich habe bei meiner aktuellen arbeit mir komischer weise angewöhnt einfache quotes zu verwenden und dadurch enstanden die fragen dieses threads und das fehlende verständnis da manche sachen nicht wie gewohnt liefen :D
gruß flobee

flobee
17.01.2004, 22:04:04
@meikel

da brauch ich mal aber einen tip aus der praxis: wie wird denn das linebreak (n) denn dann gesetzt wenn ich mit einfachen quotes arbeite?
beispiel: $output .= '<TR><TD colspan="'.$span.'"><div style="display:'.$display.';" id="help_'.$data[$i]['id'].'">'
. $data[$i]['content'] .'</div></td></TR>n';

p.s: sher gute tip: das geht wirklich sachneller! habs gerade ALLES umgeschrieben! nur habe ich jetzt hunderte von n in der ausgabe! :-(

meikel (†)
17.01.2004, 23:18:47
Original geschrieben von flobee
[B]
da brauch ich mal aber einen tip aus der praxis: wie wird denn das linebreak (n) denn dann gesetzt wenn ich mit einfachen quotes arbeite?
Es bleit ein n

Da ich fast ausschließlich mit Templates arbeite, habe ich mit n eigentlich fast nix zu tun.

Es gibt zwei Möglichkeiten:
Entweder:

printf ('Mein cooler String mit dem Zeuch %s und einem %s Enterzeichen', $var, "n");

oder:

define ('_NL', "n");
# viel zeuch...
$output .= '<TR><TD colspan="'.$span.'"><div style="display:'.$display.';" id="help_'.
$data[$i]['id'].'">'.$data[$i]['content'] .'</div></td></TR>'._NL;
p.s: sher gute tip: das geht wirklich sachneller! habs gerade ALLES umgeschrieben!
Uff, da habe ich ja was angerichtet... =X-O
nur habe ich jetzt hunderte von n in der ausgabe! :-(
Falls der Kram in einer Variablen steckt:
$text = str_replace ('n', "n", $text);

René_M
17.01.2004, 23:25:16
Original geschrieben von meikel
Falls der Kram in einer Variablen steckt:
$text = str_replace ('n', "n", $text);

meinst du jetzt $text = str_replace ('n', '<br>', $text);

flobee
17.01.2004, 23:45:10
nl2br()

meikel (†)
17.01.2004, 23:54:59
Original geschrieben von René_M
meinst du jetzt $text = str_replace ('n', '<br>', $text); Ich halte mich an die Fragestellung. Ein <br> macht in dem Beispiel wenig Sinn (sinngemäß):
<td>blub</td><br>
Wahrscheinlich möchte er die Enterzeichen, damit der HTML Quelltext ein wenig besser aussieht. Ich mach das auch, wenn ich wieder mal meine Fehler suchen muß...

meikel (†)
17.01.2004, 23:56:02
Original geschrieben von flobee
nl2br()
if ('n' === "n") die ('<h1>Verflucht! Schon wieder ein Bug!</h1>');

flobee
18.01.2004, 00:01:34
Ich mach das auch, wenn ich wieder mal meine Fehler suchen muß... [/B]

also es gibt immer noch browser die nach über 1000 zeichen pro zeile abstürzen! und netscape mag das auch nicht gern.

Olaf
18.01.2004, 17:51:16
also es gibt immer noch browser die nach über 1000 zeichen pro zeile abstürzen!Dazu hätte ich mal ne weiterführende Frage.
Kann man eigentlich irgendwie beeinflussen, dass zum Beispiel immer nach 70 Zeichen automatisch umgebrochen wird? Das sollte dann aber nur Textteile betreffen und nich den HTML-Code zerreißen.

Grüße Olaf

René_M
18.01.2004, 18:20:23
string wordwrap(string str [, int width [, string break [, int cut]]])

Olaf
18.01.2004, 20:51:59
Ja, o.k., das war aber nicht so gemeint. Z.B. beim Einsatz eines CMS hat man ja kaum Einfluss auf den ausgegebenen Code, da kann es ja schnell mal vorkommen. Ich dachte da an sowas was man in die index, durch die alles geparst wird, reinschreibt und es dann für einen erledigt (universeller ebend).

Grüße Olaf

flobee
19.01.2004, 14:20:15
dann musst du das an den stellen machen an der die ausgabe statt findet