Lange Strings umbrechen

Für bessere Lesbarkeit im Editor seines/ihres Vertrauens benutzen Entwickler oft für die Ausgabe eines langen Strings (vornehmlich HTML-Code) einen Zeilenumbruch, wenn die Zeile sonst die Breite des Bildschirms überschreiten würde. Nun gibt es zwei unterschiedliche Arten das zu tun: entweder innerhalb des echo-Befehls umbrechen oder für jede Zeile einen neuen echo-Befehl. In Code:

$var1 = "der Benutzer";
$var2 = "Administratoren";
//echo nicht unterbrochen
echo "Das größte 
    Sicherheitsrisiko für PCs ist 
    ".$var1.". ".$var2." schütteln 
    oft den Kopf über die 
    Vorgehensweise der DAUs";
 
//neues echo in jeder zeile
echo "Das größte Sicherheitsrisiko ";
echo "für PCs ist ";
echo $var1;
echo ". ";
echo $var2;
echo " schütteln oft den Kopf";
echo " über die Vorgehensweise der DAUs";

Beide Scripte geben den gleichen Satz aus.

Die Auswertung

Datei Gesamtlaufzeit durchschnittliche Laufzeit pro Durchlauf Verhältnis zur schnellsten Variante
result_echo_one_echo.php 399.604603 s 39.960 ms 100 %
result_echo_ multiple_echos.php 404.81040 s 40.408 ms 101 % (+1 %)

Man sieht, dass die Variante mit mehreren echos vom logischen Gesichtspunkt langsamer sein müsste, da ja die Funktion mehrmals aufgerufen wird. Für den echo-Befehl spielt es allerdings nur eine geringe Rolle, ob ein AUfruf mit einem langen String oder mehrere Aufrufe mir kürzeren Strings erfolgt. Es ist also kein Unterschied in der Performance erkennbar.

Ich finde trotzdem die Variante mit einem echo-Befehl übersichtlicher, da man dann stets weiß, dass alles, was etwas eingerückt steht noch zu diesem Befehl gehört. Dass trotzdem recht häufig die zweite Variante genutzt wird, liegt wahrscheinlich daran, dass ein Umbrechen wie im oberen Beispiel in JavaScript (und bestimmt auch noch einigen anderen Scriptsprachen) nicht möglich ist. Für PHP ist es allerdings zu empfehlen.
Von der Performance sind aber beide gleichwertig.

Hier gibt es noch die Quellcodes für den echo-Befehl mit Zeilenumbruch.
Und auch die Benchmark-Ergebnisse für beide Varianten

Jan hat 152 Beiträge geschrieben

19 Kommentare zu “Lange Strings umbrechen

  1. Tobias sagt:

    Hi, was ist aber wenn man jetzt alles in eine „$out“ variable schreibt und erst am ende des Documents ein einziges echo mache?

    Bsp.:
    $out = „“;
    $out.= „“;

    echo $out;

    ?

  2. admin sagt:

    Wer sonst keine Probleme hat…

    Also gibts print als Sprach konstrukt als
    print „hallo“;

    Und als Funktion?
    print(„hallo“);

    Sehr interessant *gähn*

    Wer hier auf Begriffen und Definitionen rumreitet, darf sich dann auch noch jeden einzelnen Rechtschreibfehler raussuchen. Wenn ich 2 völlig fehlleitende Begriffe genutzt hätte, würde ich solche Kommentare noch verstehen, aber so…

  3. GhostGambler sagt:

    Sry, print ist auch keine Funktion – Falschinformation meinerseits.

    Und doch, das ist eindeutig interessant, denn bei einem Sprachkonstrukt kann man die Klammern nicht nur weglassen, sie werden auch schlichtweg ignoriert, siehe z.B.

    genauso interessant bei dem hier:

    denn das ergibt nicht "bla", sondern schlichtweg gar nichts~

    Ein bisschen Hintergrundwissen schadet halt nicht.

  4. GhostGambler sagt:

    Tolles Kommentar-System…

    erster Code-Block war:
    function test() {
    return „test“;
    }

    echo („…“) . test();

    zweiter Code-Block war:
    include („test“) or die(„bla“);

  5. loci sagt:

    sprachkonstrukte unterscheiden sich von funktionen in zweierlei dingen:
    1. sie koennen keine variablen funktionen verarbeiten – $foobar()
    2. es gibt keinen overhead beim aufruf (lookup, lowercase, …)

    wenn es hier im blog also um performance geht ist der unterschied zwischen den beiden genau da zu finden.

  6. Gerhard sagt:

    Warum ist ein Umbrechen bspw. in JS nicht möglich? Ich benutze immer folgendes Konstrukt – für jede Ausgabe quasi als Kombi:

    echo „Das größte Sicherheitsrisiko “ .
    „für PCs ist $var1. $var2″ .
    “ schütteln oft den Kopf“ .
    “ über die Vorgehensweise der DAUs“;

  7. Jan sagt:

    @Gerhard: Und wrum tust Du das? In PHP kannst Du ja problemlos zeilenumbrüche einbauen, musst nicht nach jeder Zeile konkatenieren.
    Bei JS gehts aber nur so, da haste recht (weil dort das Parsen schwieriger ist -> Es muss kein Semikolon am Ende des befehls stehen sondern es reicht auch ein Zeilenumbruch mitunter. Da ist JS ein wenig inkonsequent)

  8. GhostGambler sagt:

    Probier mal copy&paste mit einem Text zu machen der viele Umbrüche im HTML-Code hat. Die sieht man zwar auf der Website nicht, aber beim Einfügen in Wordpad oder so doch wieder.

  9. Gerhard sagt:

    @Jan: Wenn ich in einen PHP-String Zeilenumbrüche einbaue, werden diese dann auch mit in die HTML-Ausgabe des PHP-Scriptes übertragen. Dies ist in der Regel nicht schlimm, jedoch achte ich primär darauf, dass ich den Quelltext des PHP gut lesen/bearbeiten kann. Meist sind die Ausgaben eingerückt, wobei das dann wieder unnötige Tabulatoren/Leerzeichen im HTML zur Folge hat. Das zieht sich bei mir bis zu den SQL-Queries:
    $db_class->query(
    „SELECT * FROM user “ .
    “ WHERE user_id = %d „,
    $user_id
    );
    gerade bei Where-Bedingungen und komplexen Joins lassen sich logische Teilstrings leicht auskommentieren und es ist global einheitlich. Zudem sind Prepared Statements das einzig Wahre 🙂

  10. Maik sagt:

    Ich habe gerade kurz mitgelesen und wenn es hier wirklich um Performance geht, sollte man sich nicht rumstreiten, was denn nun eine funktion ist oder nicht, sondern mal den PHP Parser genauer unter die Lupe nehmen.

    Also in Zukunft bitte NICHT

    echo „Hello World“;

    SONDERN

    echo ‚Hello World‘;

    Mit einfachen Anführungsstrichen versucht PHP den darin enthaltenen Text nicht zu interpretieren und ist daher in höheren Datenflussbereichen spührbar schneller. Was allerdings nicht mehr funktioniert ist dann

    $you = ‚Maik‘;
    echo ‚Hello $you‘;

    Müsste dann, wie eigentlich auch konform folglich geschrieben werden.

    $you = ‚Maik‘;
    echo ‚Hello ‚ . $you;

    Soviel dazu… 😉

  11. guiasbkd sagt:

    Man darf jedoch nicht vergessen, dass man beispielsweise in Javascript mehrzeilige Strings erstellen kann, solange man diesen in mehrere aufteilt und mit + verbindet

Eine Antwort schreiben

Ihre E-Mail-Adresse wird nicht veröffentlicht. Benötigte Felder sind markiert mit *

You may use these HTML tags and attributes: <a href=""> <blockquote cite=""> <pre lang=""> <b> <strong> <i> <em>