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.