Stringverknüpfung

Flex

(aka Felix Jacobi)
Im Blog von Gareth Heyes (The Spanner) hat er eine Performance Verbesserungen angesprochen, die für seinen Captcha gemacht wurden.
Neben dem strikten Vergleich mit === gegenüber == ging es auch um die Stringverkettung bei Variablen:

I usually concat a string with the following:-

PHP:
echo '<option>'.$variable.'</option>';

But a better way is to use commas to output the string because PHP only has to output it instead of using concatenation.

PHP:
echo '<option>',$variable,'</option>';

That’s all for now, I might include some more examples at a later time.

Nun muss ich ehrlich gesagt gestehen, dass ich die Verkettung mit "," noch nie gesehen habe und spontan auch nichts auf php.net gefunden habe.

Vielleicht hat ja jemand eine kleine Erklärung dazu, warum das performanter sei, denn die Begründung verstehe ich nicht ganz, warum die Verkettung langsamer sein soll.
Denn letzendlich ist es doch ebenfalls nur ein Output wenn man "." benutzt?
 
Habe die Lösung selber gefunden.

Bei der Komma Variante wird folgendes ausgeführt:

PHP:
echo "foo";
echo $var;
echo "bar";


Bei der . Variante wird es zu folgendem Konstrukt umgebaut:

Code:
string temp;
temp = temp.concat("foo", $var);
temp = temp.concat ($temp, "bar");
echo temp;

Ergo ist erste Variante schneller (allerdings auch hässlicher).

Falls ich falsch liegen sollte, bitte ich um Korrektur.

Fazit:
Ich glaub ich wechsle zu [phpf]print[/phpf]. ;)
 
Das Komma ist in dem Fall auch keine Zeichenkettenverknüpfung sondern wie bei Funktionen das Zeichen zum Trennen von mehreren Parametern. Dabei ist echo gar keine richtige Funktion sondern ein Sprachkonstrukt, wodurch auch die für Funktionen typischen Klammern weggelassen werden können. Lustig ist allerdings, dass bei der Schreibweise mit Klammern die Komma-Schreibweise nicht erlaubt ist, wie man es von Funktionen eigentlich kennt:
PHP:
echo 'foo', 'bar';
// aber nicht
echo('foo', 'bar');
 
Nicht unbedingt. Funktionen geben immer einen Wert zurück, und sei es nur der NULL-Wert:
PHP:
function foobar() {}
var_dump(foobar());
Das echo-Sprachkonstrukt hingegen kann gar nicht in dem Kontext wie eine Funktion eingesetzt werden. So kann echo nur als Anweisung für sich selbst stehen. Funktionen hingegen (auch printf()) können auch in anderen Kontexten eingesetzt werden, etwa:
PHP:
function foobar( $length )
{
	return 'printf() gab '.$length.' Zeichen aus.';
}

$foobar = foobar(printf('<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>'));
var_dump($foobar);
 
Zurück