Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : [PHP] Zeilenumbruch!



Bluescreen
26.08.2008, 18:16
Banale Frage, nach der sich aber leider nicht erfolgreich suchen lässt:

Bei doppelten Anführungszeichen wird ein Zeilenumbruch mit einem \n kodiert:

echo "Zeile vor dem Umbruch \n Zeile nach dem Umbruch";

Aber wie geht das bei einfachen Anführungszeichen, die ich jetzt der Performance-wegen benutzen will:

echo 'Zeile vor dem Umbruch ¿Zeichen? Zeile nach dem Umbruch';

Ich bin sicher es gibt auch eine banale Antwort^^
Dankö!

Xardas der Dunkle
26.08.2008, 19:18
Gibt es nicht, es geht nur so:

echo 'Hallo' . "\n" . 'Welt';

Das ist schließlich der Grund, wieso ' performanter ist, wobei mir selbst durchgeführte Benchmarks dies leider nicht bestätigen konnten :(.
Ich bleibe persönlich trotzdem bei ', schon allein aus optischen Gründen :D.

Bluescreen
26.08.2008, 19:29
Das ist schließlich der Grund, wieso ' performanter ist, wobei mir selbst durchgeführte Benchmarks dies leider nicht bestätigen konnten :(.
Ich bleibe persönlich trotzdem bei ', schon allein aus optischen Gründen :D.
Okey, danke dafür.

In meinem Ferienjob-Geschäft ist ' auch die Richtlinie, und da ich auch nie so "String mit $variable"-Zeug benutze, brauch ich die " eigentlich auch nicht, höchsten für den Umbruch.

drunken monkey
26.08.2008, 19:42
Es geht auch einfach so:

echo 'Zeile vor dem Umbruch
Zeile nach dem Umbruch';

Bluescreen
26.08.2008, 19:44
Es geht auch einfach so:

echo 'Zeile vor dem Umbruch
Zeile nach dem Umbruch';
Ist aber im Code nicht so - ästhetisch.^^
Mag ich nicht so.

The Best Isaac
26.08.2008, 19:44
Mal eine Frage, wenn's hier eh grad um Zeilenumbrüche geht.
Bei mir wird kein Zeilenumbruch erzeugt, wenn ich einen String, der "\n", enthält, per echo ausgebe-, dafür musste ich seit jeher mit <br /> arbeiten. Das hat ja auch soweit seine Richtigkeit, oder nicht? Insofern ist es doch ein wenig sinnfrei, ein "\n" per echo auszugeben? Korrigiert mich bitte, wenn ich da falsch liege. =0

Und ich persönlich finde Strings in "Gänsefüßchen" hübscher als in 'Anführungszeichen'. ^^

Xardas der Dunkle
26.08.2008, 19:49
Das <br /> erzeugt, den Umbruch in der HTML-Ausgabe. Das \n den im Quelltext und auch ein Quelltext sollte schön aussehen :D.


Und ich persönlich finde Strings in "Gänsefüßchen" hübscher als in 'Anführungszeichen'. ^^
Aber: $array["Bla"] sieht auf jeden Fall einfach nur zum kotzen aus^^.

Bluescreen
26.08.2008, 19:49
Mal eine Frage, wenn's hier eh grad um Zeilenumbrüche geht.
Bei mir wird kein Zeilenumbruch erzeugt, wenn ich einen String, der "\n", enthält, per echo ausgebe-, dafür musste ich seit jeher mit <br /> arbeiten. Das hat ja auch soweit seine Richtigkeit, oder nicht? Insofern ist es doch ein wenig sinnfrei, ein "\n" per echo auszugeben? Korrigiert mich bitte, wenn ich da falsch liege. =0Es macht den HTML Code übersichtlich.
Wenn man in demselben nachschaun und zb. Stil ändern will, ist das sinnvoll/nötig.
Die Broswerausgabe beeinflusst das nicht.
Sinnvoll auch beim Debugging in kompination mit einem <pre>.


Und ich persönlich finde Strings in "Gänsefüßchen" hübscher als in 'Anführungszeichen'. ^^In erster Linie subjektives empfinden.
Allerdings werden die einfachen Anführungszeichen vor der Ausgabe nicht nach zu interpretierenden Zeichencodes oder aufzulösenden Variablen durchsucht.
Theoretisch ein performance Gewinn, bei nicht normalen Anwendungen aber nicht spürbar.
Da ich aber sowieso Variablen nie direkt in die Strings schreibe, der Übersicht und Korrektheit wegen, empfehlen für mich sowieso die einfachen.
Und ich würde ganz gerne die Anführungszeichen im HTML Code einheitlich doppelt machen, und natürlich nicht escapen.
Edit: Irgendjemand hatte noch einen Benchmark Post geschrieben und zurückgezogen:
PHP Benchmarks gibt's auf The PHP Benchmark (http://www.phpbench.com/). Ein "-String mit war im Vergleich mit einem '-String 689 % langsamer! :eek:

Edit 2: Ich postes mal unten...

The Best Isaac
26.08.2008, 19:57
Das <br /> erzeugt, den Umbruch in der HTML-Ausgabe. Das \n den im Quelltext und auch ein Quelltext sollte schön aussehen :D.
Hm, stimmt auch wieder. Aber mir ist nur wichtig, wie der Code in meinem PHP-Skript aussieht, und da würden mich die Zeilenumbruch-Codes nur stören. xD

Dass das mit " und ' subjektiv ist, was man schöner findet, ist klar. Ich bin's halt aus anderen Programmiersprachen eher gewöhnt, Strings in Gänsefüßchen zu packen. ^^


Aber: $array["Bla"] sieht auf jeden Fall einfach nur zum kotzen aus^^.
Wirklich schön ist das nicht, da hast du recht. Aber assoziative Arrays hab ich bisher erst einmal verwendet (was aber daran liegen kann, dass ich generell nicht viel mit PHP mach).

Dass ' performancesparender sind als " wusste ich aber bis jetzt noch gar nicht. Man lernt halt nie aus. =)

Xardas der Dunkle
26.08.2008, 19:57
Zu der Performance poste ich nochmal meinen Test, ausgeführt unter Windoof XP (vllt habt ihr ja bessere Ergebnisse [und stört euch net an dem Code xD]):

Einfache Anführungszeichen: 0.06699562 ms
Doppelte Anführungszeichen: 0.05292892 ms
Doppelte Anführungszeichen, parsed: 0.06604195 ms
HEREDOC: 0.07605553 ms
HEREDOC parsed: 0.11992455 ms
sprintf: 0.11992455 ms

<?php
header('Content-Type: text/html; charset=utf-8');

$time = microtime(true);
for($i=0; $i<100; $i++) {
$b = 'Welt';
$a = 'Hallo ' . $b;
}
$t = (microtime(true) - $time);
echo 'Einfache Anführungszeichen: ' . sprintf('%0.8f ms', $t * 1000) . "<br />\n";

$time = microtime(true);
for($i=0; $i<100; $i++) {
$b = "Welt";
$a = "Hallo " . $b;
}
$t = (microtime(true) - $time);
echo 'Doppelte Anführungszeichen: ' . sprintf('%0.8f ms', $t * 1000) . "<br />\n";

$time = microtime(true);
for($i=0; $i<100; $i++) {
$b = "Welt";
$a = "Hallo $b";
}
$t = (microtime(true) - $time);
echo 'Doppelte Anführungszeichen, parsed: ' . sprintf('%0.8f ms', $t * 1000) . "<br />\n";

$time = microtime(true);
for($i=0; $i<100; $i++) {
$b =<<<HEREDOC
Welt
HEREDOC;
$a = <<<HEREDOC
Hallo
HEREDOC
. $b;
}
$t = (microtime(true) - $time);
echo 'HEREDOC: ' . sprintf('%0.8f ms', $t * 1000) . "<br />\n";

$time = microtime(true);
for($i=0; $i<100; $i++) {
$b =<<<HEREDOC
Welt
HEREDOC;
$a = <<<HEREDOC
Hallo $b
HEREDOC
. $b;
}
$t = (microtime(true) - $time);
echo 'HEREDOC parsed: ' . sprintf('%0.8f ms', $t * 1000) . "<br />\n";

$time = microtime(true);
for($i=0; $i<100; $i++) {
$a = sprintf('Hallo %s', 'Welt');
}
$t = (microtime(true) - $time);
echo 'sprintf: ' . sprintf('%0.8f ms', $t * 1000) . "<br />\n";

echo "<br />\n";
highlight_file(__FILE__);




/Edit: Ändert man die Durchläufe von 100 auf 8000 wird der unterschied langsam Spürbar!

Bluescreen
26.08.2008, 20:02
Zu der Performance poste ich nochmal meinen Test, ausgeführt unter Windoof XP (vllt habt ihr ja bessere Ergebnisse [und stört euch net an dem Code xD]):

PHP Benchmarks gibt's auch auf The PHP Benchmark (http://www.phpbench.com/). Ein "-String mit war dort im Vergleich mit einem '-String 689% langsamer! :eek:

Xardas der Dunkle
26.08.2008, 20:09
o_Ô Wo da?^^
Also den ich gefunden habe ganz unten auf der Seite, sagt für beides 102-110% also im gründen Bereich.

/Edit: Meinst du vllt, print vs. echo?^^

The Best Isaac
26.08.2008, 20:18
PHP Benchmarks gibt's auch auf The PHP Benchmark (http://www.phpbench.com/). Ein "-String mit war dort im Vergleich mit einem '-String 689% langsamer! :eek:

Entweder hast du dich verlesen oder deine 689% waren von einem älteren Test. Auf der verlinkten Seite finde ich auch nur die Werte, die Xardas genannt hat.

Bluescreen
26.08.2008, 20:30
Entweder hast du dich verlesen oder deine 689% waren von einem älteren Test. Auf der verlinkten Seite finde ich auch nur die Werte, die Xardas genannt hat.
*lol*, ihr habt natürlich irgemdwie Recht...^^

mitaki
26.08.2008, 20:53
/Edit: Ändert man die Durchläufe von 100 auf 8000 wird der unterschied langsam Spürbar!

Da muss man auch bedenken, dass PHP die jeweiligen Aktionen auch entsprechend oft durchführt bei einem entsprechend ausgelasteten Server.

Jesus_666
27.08.2008, 13:37
Hm, stimmt auch wieder. Aber mir ist nur wichtig, wie der Code in meinem PHP-Skript aussieht, und da würden mich die Zeilenumbruch-Codes nur stören. xD
Kein guter Ansatz. Wenn du Schwierigkeiten kriegst, weil dein PHP-Skript an irgendeiner Stelle nicht wohlgeformten Output erzeugt oder weil einfach ein Styesheet nicht das tut, was es tun sollte, dann wirst du dir ordentliche Zeilenumbrüche und Einrückung wünschen.


Zum Thema "<br>"* vs. "\n": "<br>" verwendest du nur, wenn du HTML ausgibst. PHP muß aber nicht unbedingt HTML ausgeben. Ich habe Shellskripte in PHP geschrieben und verwende in einer Webanwendung ein PHP-Backend, um JSON-Strings zu erzeugen. Luki verwendet PHP als Präprozessor für das Datenformat einer Chemiesoftware (oder hat das mal getan). Da braucht man überall nur "\n".

Es kommt also immer darauf an, was man erzeugt - und das ist nicht immer HTML.


* "<br />" ignoriere ich mal, weil XHTML effektiv tot ist.

Bluescreen
27.08.2008, 14:17
Kein guter Ansatz. Wenn du Schwierigkeiten kriegst, weil dein PHP-Skript an irgendeiner Stelle nicht wohlgeformten Output erzeugt oder weil einfach ein Styesheet nicht das tut, was es tun sollte, dann wirst du dir ordentliche Zeilenumbrüche und Einrückung wünschen.Ganz meine Meinung. Und die (Probleme) wird man schon bekommen, wenn man groößere Projekte mal editieren muss!



Zum Thema "<br>"* vs. "\n": "<br>" verwendest du nur, wenn du HTML ausgibst. PHP muß aber nicht unbedingt HTML ausgeben. Ich habe Shellskripte in PHP geschrieben und verwende in einer Webanwendung ein PHP-Backend, um JSON-Strings zu erzeugen. Luki verwendet PHP als Präprozessor für das Datenformat einer Chemiesoftware (oder hat das mal getan). Da braucht man überall nur "\n".

Es kommt also immer darauf an, was man erzeugt - und das ist nicht immer HTML.

* "<br />" ignoriere ich mal, weil XHTML effektiv tot ist.Schon, ich hab aber auch bewusst ins Webentwicklungs-Forum gepostet.

Xardas der Dunkle
27.08.2008, 14:41
* "<br />" ignoriere ich mal, weil XHTML effektiv tot ist.
Schwachsin! XHTML ist groß im kommen, zumal XHTML im Gegensatz zu HTML auch durch einen XML-Parser laufen kann ...
Vorallem spuckt PHP selber XHTML aus (siehe die Funktion nl2br)!

/EDIT: Ich weise auch mal auf den Doctype dieses Forums hin :p

mitaki
27.08.2008, 15:17
Schwachsin! XHTML ist groß im kommen, zumal XHTML im Gegensatz zu HTML auch durch einen XML-Parser laufen kann ...
Dreht man es etwas, erkennt man, dass XHTML von XML- und HTML-Parsern verarbeitet werden kann. Wobei das mit dem XML-Parser auch nicht immer stimmt.


Vorallem spuckt PHP selber XHTML aus (siehe die Funktion nl2br)!
Aus gerade genanntem Grund.


/EDIT: Ich weise auch mal auf den Doctype dieses Forums hin :p
Das ist doch der Beweis (http://validator.w3.org/check?uri=http%3A%2F%2Fwww.multimediaxis.de%2Findex.php&charset=(detect+automatically)&doctype=Inline&group=0), dass dies gerade nicht (http://www.validome.org/validate/?uri=http://www.multimediaxis.de/index.php) der Fall ist (http://schneegans.de/sv/?url=http%3A%2F%2Fwww.multimediaxis.de%2Findex.php&schema=(Detect+automatically)&encoding=(Detect+automatically)&htmlcomp=(Detect+automatically)).

Aber da XHTML schon mal da ist wirds auch weiterentwickelt, synchron zu HTML.

Xardas der Dunkle
27.08.2008, 15:25
Das mit dem Parser war jetzt nicht unbedingt auf den Parser des Browsers bezogen. (Zudem gehe ich von validem XHTML aus, was leider kaum einer umsetzt :rolleyes:).


Das ist doch der Beweis, dass dies gerade nicht der Fall ist.
Habe ich gesagt das es valide ist?, Ich sagte der Doctype ist ein XHTML-Doctype!


Aber da XHTML schon mal da ist wirds auch weiterentwickelt, synchron zu HTML.
Trotzdem ist XHTML einiges sauberer als HTML. Zudem sind beide Versionen die gerade in Planung sind Mist, <h>-Tag, anstatt <h[1-6]> was zu ein scheiß.

mitaki
27.08.2008, 15:41
Das mit dem Parser war jetzt nicht unbedingt auf den Parser des Browsers bezogen. (Zudem gehe ich von validem XHTML aus, was leider kaum einer umsetzt :rolleyes:).
Parser ist Parser. Letzteres ist leider wahr.


Habe ich gesagt das es valide ist?, Ich sagte der Doctype ist ein XHTML-Doctype!
Nein, aber was beweist das schon? Ich meine, es spricht nicht viel gegen XHTML, aber auch nicht viel dafür.


Trotzdem ist XHTML einiges sauberer als HTML. Zudem sind beide Versionen die gerade in Planung sind Mist, <h>-Tag, anstatt <h[1-6]> was zu ein scheiß.
XHTML ist einfacher auf Fehler zu prüfen, das wars aber auch schon.

Es ist ja bekannt, dass ich eher zu HTML 5 tendiere, welches du nur angestriffen hast. Ich denke diese Entwicklung geht in die Richtige Richtung und erlaubt das, was XHTML erlaubt auf autorenfreundlicherem Weg (SVG, MathML, Ruby).

XHTML 2.0 wird momentan nicht wirklich weiterentwickelt, die WG arbeitet an allem anderen, nur nicht daran.

Crash-Override
27.08.2008, 21:22
Trotzdem ist XHTML einiges sauberer als HTML. Zudem sind beide Versionen die gerade in Planung sind Mist, <h>-Tag, anstatt <h[1-6]> was zu ein scheiß.

Ist imho sehr viel logischer. Die Groesse und das Aussehen des letztendlichen Headers sollte mehr oder weniger sowieso von CSS uebernommen werden, da sind die 6 Abstufungen unangebracht, da man durch Klassen viel sinnvollere, je nach Situation, erzeugen kann.

The Best Isaac
27.08.2008, 22:07
Ist imho sehr viel logischer. Die Groesse und das Aussehen des letztendlichen Headers sollte mehr oder weniger sowieso von CSS uebernommen werden, da sind die 6 Abstufungen unangebracht, da man durch Klassen viel sinnvollere, je nach Situation, erzeugen kann.
Geht es bei den <h[1-6]>-Tags nicht eher um die logische Gliederung des Textes als um die gestalterische? Ist doch genauso wie mit dem <cite>-Tag, da wird der Text kursiv dargestellt, obwohl man das ganze, wenn's um das gestalterische geht, genauso gut mit dem <i>-Tag erreichen kann. Aber <cite> kennzeichnet eben ein Zitat (das soll dann z.B. für Sprachbrowser eine Kennung sein, das besonders zu betonen oder was weiß ich).
So gesehen hätten <h[1-6]> imo durchaus ihre Berechtigung.

mitaki
27.08.2008, 22:43
Geht es bei den <h[1-6]>-Tags nicht eher um die logische Gliederung des Textes als um die gestalterische? Ist doch genauso wie mit dem <cite>-Tag, da wird der Text kursiv dargestellt, obwohl man das ganze, wenn's um das gestalterische geht, genauso gut mit dem <i>-Tag erreichen kann. Aber <cite> kennzeichnet eben ein Zitat (das soll dann z.B. für Sprachbrowser eine Kennung sein, das besonders zu betonen oder was weiß ich).

Das Problem das XHTML 2.0 damit lösen möchte ist, dass man eben nur 6 Ebenen zur Gliederung zur Verfügung hat, mit <section> und <h> gibt es unendlich viele Untergliederungen.

HTML 5 definiert dagegen <h[1-6]> zusammen mit den neuen Elementen so um, dass dies auch hier möglich ist. Ein <section> Element gibt es hier ebenfalls, aber auch z.B. <article> usw.