Hier im Forum bekommt ihr bei euren fragen schnelle hilfe.Hier geht es rund um das Web SeitenProgrammieren.Alles rund ums Javascript,Html,Php,Css und Sql.Auf fast allen Fragen haben wir eine Antwort.
Der Soforthilfe-chat verspricht das ,was sein Name sagt. Hier sind Leute Online die sofort ihre hilfe anbieten.Seht in der OnlineListe nach und wenn einer Online ist werdet ihr auch antwort bekommen. Admine ,Moderatoren und Helfer sind unsere Spezialisten in Sachen Web Programierung
71 Unwetterwarnungen in Deutschland
Die Datenbank wurde zuletzt am 02.08.2020 17:34:28 aktualiesiert
71

Variablen in String einbetten oder konkatenieren

In PHP kann man Variablen auf zwei unterschiedliche Arten in einen String einbauen.

$zeit = time(); 
 // Variable im String  
echo "Der aktuelle UNIX-Timestamp ist $zeit."; 
   // Variable konkateniert  
echo "Der aktuelle UNIX-Timestamp ist ".$zeit.".";

Ich finde die zweite Variante sauberer, da sie die Variablen eindeutig vom String trennt, trotzdem möchte ich aber – nicht zuletzt angestoßen durch soulrebels Beitrag im Forum mal untersuchen, inwiefern sich beide Arten in der Performance unterscheiden.

Ich will nicht lang drumrumreden, sondern direkt das Ergebnis präsentieren:

Datei Gesamtlaufzeit durchschnittliche Laufzeit pro Durchlauf Verhältnis zur schnellsten Variante
var_out_of_ string.php 27.359341 s 2.736 ms 100%
var_out_of_ string_singlequote.php 27.759916 s 2.776 ms 101 % (+ 1%)
var_in_string.php 29.492408 s 2.949 ms 108 % (+ 8%)

Die Konkatenierungsvariante ist also nicht nur sauberer sondern auch schneller (wenn es auch kein wirklich großer Unterschied ist).

Nun, wodurch kommt das? Es ist nur eine Mutmaßung, aber ich kann mir vorstellen, dass jedes Zeichen des Strings einzeln untersucht werden muss und dadurch das Parsen mit einem regulären Ausdruck beim direkten Einbetten in den String länger dauert, denn der Parser weiß ja, wenn er auf $z stößt, erstmal noch nicht, ob der Variablenname danach noch weiter geht. Deshalb holt er sich Stück für Stück noch das e, i und t und stößt danach auf einen Punkt (.), der in PHP-Variablennamen nicht vorkommen darf. Erst dann weiß er, wie der Variablenname heißt – nämlich $zeit – und kann den Wert dieser Variablen an diese Stelle einbauen.

Wenn man die Variable an den String konkateniert, steht sofort für den Parser fest, welche Variable gemeint ist. Und genau da ist dann auch der Geschwindigkeitsunterschied begründet.

Also sowohl der besseren Lesbarkeit als auch der Geschwindiskeit wegen empfehle ich Variablen in Strings zu konkatenieren statt sie einzubetten.