PHP: Ist es besser, auf 1 Zeile oder mehrere Zeilen verketten? Oder gibt es einen Unterschied?

StackOverflow https://stackoverflow.com/questions/431569

  •  08-07-2019
  •  | 
  •  

Frage

Gibt es einen Unterschied oder ist eine besser als die andere der folgenden Optionen:

$var = '';
...
$var .= 'blah blah';
$var .= $var2;
$var .= 'blah blah';

oder

$var = '';
...
$var .= 'blah blah' . $var2 . 'blah blah';

Gibt es eine Geschwindigkeitsdifferenz oder gibt es einen Grund, warum Sie einen über die andere wählen würden?

War es hilfreich?

Lösung

Es gibt einen kleinen Unterschied, wenn Sie die Zeichenfolge Echo.

echo $var1,$var2,$var3 // comma (echo with multiple arguments)

ist etwas schneller als

echo $var1.$var2.$var3 // dot   (concat and echo)

Andere Tipps

Sowohl PEZ und Topbit korrekt sind. Ich möchte nur etwas hinweisen, ich denke, sieht besser aus, als es hier gesehen worden:

$var  = "line 1 \n";
$var .= "line 2 \n";

Vergleich

$var = "line 1 \n"
     . "line 2 \n";

ich viel lieber die zweite auf die erste als visuell ist es offensichtlich, Ihr Ergebnis die $ var eine Zeichenfolge ist. Es verhindert auch, dumme Fehler wie:

$var  = "line 1 \n";
$var .= "line 2 \n";
$vat .= "line 3 \n";
$var .= "line 4 \n";

Es spielt keine Rolle für ein paar kurzen, Streicher. Verwenden Sie, was ist klarer zu lesen.

Wenn Sie aber viele von ihnen haben (sagen Tausend) nicht so kurze, werden Sie wahrscheinlich wollen, dass sie in einem Array zu halten und sie miteinander zu verbinden. (Da es einen solchen Code geschieht, ist oft so einfach wie verketten die Saiten zu lesen mit „=“, so dass Sie nicht Klarheit auf dem Altar der Leistung zu opfern.)

EDIT: Ich glaube nicht, mein oben Denken gültig ist. PHP-Strings sind wandelbar, nicht wahr?

Wird nicht einen Unterschied machen. Beide sind Verkettung, so etwas ist am einfachsten zu lesen, was Sie verwenden sollen.

Wenn Sie nach der besten Leistung, versuchen Sie ein Array verwenden und es dann implodieren, wenn Sie fertig sind.

$var = array();
$var[] = "line 1\n";
$var[] = "line 2\n";
$var[] = "line 3";
$var = implode('', $var);

Wie man es auch die Geschwindigkeitsdifferenz tun wird vernachlässigbar, wenn Sie mit Tausenden von großen Strings arbeiten.

Für alles, was Sie manuell in Code verketten, Leistung wahrscheinlich keine Rolle spielt, so ist die Lesbarkeit König. Für mich ist dies oft bedeutet, mit heredoc Syntax. Ich mag es nicht so, wie es meine Einbuchtung Struktur bricht, aber es ist besonders schön, wenn man Zeilenumbrüche wollen und / oder Tabs richtig in die Saiten eingefügt.

Ich glaube nicht, dass Sie für eine so kurze Situation bemerken. Ich entscheide, typischerweise aus Gründen der Lesbarkeit Gründen, die ich verwenden werde. Ich teile nur auf zwei Situationen, sonst auf einer Linie:

a) Erstellen einer mehrzeiligen Antwort so dass der Code etwas nachahmt, was der Benutzer sehen. Ich habe festgestellt, es macht es einfache Tippfehler und Fehler auf diese Weise zu fangen.

$var  = "line 1 \n";
$var .= "line 2 \n";

b) Leitungslänge. Wenn die Zeile wird mein Fenster überfluten werde ich es in der Regel brechen, so muß ich nicht bis zum Ende der Zeile gehen, um das Ende zu lesen. Die meisten Sprachen unterstützen ein Zeilenfortsetzungszeichen, damit ich wirklich nicht, es muß in dem Code physisch brechen, aber nur eine Gewohnheit, ich habe da ich in einigen Sprachen funktionieren, dass es nicht haben.

Der schnellste Weg, um eine große Menge an Daten in ein einziges String zu erhalten, ist die Ausgabe-Pufferung zu erfassen echo'd Ausgabe.

ob_start();
/* many echos. For example, in a loop */
$outString = ob_get_contents(); // get the complete string
ob_end_clean();

In der Regel ist es unwahrscheinlich, dass ein signifikanter Unterschied zu der Geschwindigkeit des Programms zu machen, so deutlich machen, schauen, was Sie tun, da Sie kommen müssen zurück, um es später sowieso zu reparieren / aktualisieren. Ablesbarkeit ist König.

Es gibt keinen sinnvollen Unterschied. Es ist nur eine Frage der Präferenz-Codierung.

hatte ich eine Ahnung, dass ein Array machen und dann implodieren könnte der schnellste Weg sein. Ich lag falsch! Allerdings tun ein str $ = $ str + $ bla ist wirklich langsam durch Größenordnung! Es zählt nur, wenn Ihr eine Tonne Verkettungen zu tun. Hier ist mein Test-Code:

<?php

function doit($n) {

    $str2concat = 'Esta es una prueba. ¿Cuál manera es más rápida?';

    $str = '';

    // option 1
    $start = microtime(true);

    for( $i=0; $i <= $n; $i++ ) {
        $str .= $str2concat;
    }

    $end = microtime(true);
    echo " Concat: $n Iterations, duration:" . ($end-$start) . "\n";

    // option 2
    $str = '';
    $start = microtime(true);

    for( $i=0; $i <= $n; $i++ ) {
        $str = $str . $str2concat;
    }

    $end = microtime(true);
    echo "Concat2: $n Iterations, duration:" . ($end-$start) . "\n";

    // option 3
    $str = [];
    $start = microtime(true);

    for( $i=0; $i <= $n; $i++ ) {
        $str[] = $str2concat;
    }

    $str = implode( $str );
    $end = microtime(true);
    echo "Implode: $n Iterations, duration:" . ($end-$start) . "\n\n";

}

doit( 5000 );
doit( 10000 );
doit( 100000 );

Hier sind die Ergebnisse, die ich habe:

 Concat: 5000 Iterations, duration:0.0031819343566895
Concat2: 5000 Iterations, duration:0.41280508041382
Implode: 5000 Iterations, duration:0.0094010829925537

 Concat: 10000 Iterations, duration:0.0071289539337158
Concat2: 10000 Iterations, duration:1.776113986969
Implode: 10000 Iterations, duration:0.013410091400146

 Concat: 100000 Iterations, duration:0.06755805015564
Concat2: 100000 Iterations, duration:264.86760401726
Implode: 100000 Iterations, duration:0.12707781791687
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top