Anführungszeichen Einfach oder Doppelt? Nicht nur eine Frage der persönlichen Vorliebe...

Viele PHP Entwickler schwören auf das doppelte Anführungszeichen ... Andere sind heiße Verfechter des einfachen für String-Bearbeitung. Wieder Anderen ist es total egal.

Aber so einfach kann man es sich nicht machen, denn es ist auch eine Frage der Performance.

Was also ist besser?$hallo = "Hallo";
$hallo_welt = "$hallo Welt.";
oder$hallo = 'Hallo';
$hallo_welt = $hallo.' Welt.';

Testen wir es einfach mit einer schönen extra langen FOR Schleife.

Das Testscript

<?php
/** Simple function to replicate PHP5 behaviour **/
function microtime_float()
{
  list($usec, $sec) = explode(" ", microtime());
  return ((float)$usec + (float)$sec);
}
$hallo = "Hallo";
$time_start = microtime_float();
// doing a lot of string operations
for($x = 0; $x < 1000000; $x++)
{
  $hallo_welt = "$hallo Welt.";
}
$time_end = microtime_float();
$time = $time_end - $time_start;
var_dump($time);
$time_start = microtime_float();
// doing a lot of string operations
for($x = 0; $x < 1000000; $x++)
{
  $hallo_welt = $hallo.' Welt.';
}
$time_end = microtime_float();
$time = $time_end - $time_start;
var_dump($time);
?>

Technische Hintergründe

Warum ist das Ergebnis derart unterschiedlich?

Nun, man kann in doppelten Anführungszeichen, den sogenannten "doublequotes", direkt auf PHP Variablen zugreifen ohne den String zu schließen oder einzelne Elemente aneinanderzureihen (zu konkatenieren). Dies ist sicherlich eine sehr bequeme Möglichkeit einen String zusammenzubauen (z.B.: echo "Variable: $foo"; Ausgabe: "Variable: bar").

ABER,
der PHP Interpreter muss diese eingebauten Variablen finden und durch deren Wert ersetzen. Und wo etwas getan werden muss, geht auch Zeit dafür drauf.

Auf der anderen Seite stehen die einfachen Anführungszeichen, die sogenannten "singlequotes". Zwischen Ihnen ist es nicht möglich auf PHP Variablenwerte zuzugreifen. Würde man es versuchen, bekäme man nur die Variable als Text ausgegeben (z.B.: echo 'Variable: $foo'; Ausgabe: 'Variable: $foo'). Nicht so doll.

ABER,
dieses Verhalten ist ebenso ein Ergebnis des PHP Interpreters, welcher an dieser Stelle sehr faul ist und den Inhalt zwischen den einzelnen Anführungszeichen ungesehen hinnimmt und weitergibt. Nichts getan - schnell fertig!