PHP - Verketten oder direkt Einfügen von Variablen in Zeichenfolgen


224

Ich frage mich, wie PHP-Variablen in eine Zeichenfolge eingefügt werden können.

Diesen Weg:

echo "Welcome ".$name."!"

Oder so:

echo "Welcome $name!"

Beide Methoden funktionieren in meinem PHP v5.3.5. Letzteres ist kürzer und einfacher, aber ich bin mir nicht sicher, ob das erste besser formatiert oder als besser akzeptiert akzeptiert wird.


18
Wenn Sie das erste machten, bevorzuge ich persönlich ein einfaches Anführungszeichenecho 'Welcome '.$name.'!';
KJYe.Name 葉家仁


2
@ kjy112 Ich sagte das gleiche in meiner Antwort, ich bin ein RIESIGER Fan von einfachen Anführungszeichen: X
Khez

11
Persönlich ignoriere ich die gesamten "Einfache Anführungszeichen sind effizienter" und gehe einfach zu "Verwenden Sie den Anführungszeichenstil, der die letzte Menge an internem Escape erfordert". Es ist sehr unwahrscheinlich, dass Code, den Sie schreiben, von MICROSCOPIC-Gewinnen profitiert, da weniger Zeichenfolgen analysiert werden als die Zeichenfolgenverkettung erhöht wird.
Marc B

1
Leistungsverlustanspruch ist falsch. Siehe diesen Artikel als Referenz: nikic.github.io/2012/01/09/…
Damian

Antworten:


344

Zwischen diesen beiden Syntaxen sollten Sie wirklich die auswählen, die Sie bevorzugen :-)

Persönlich würde ich in einem solchen Fall mit Ihrer zweiten Lösung (Variableninterpolation) gehen , die ich sowohl schreiben als auch lesen leichter finde.

Das Ergebnis wird das gleiche sein; und selbst wenn es Auswirkungen auf die Leistung gibt, spielen diese keine Rolle 1 .


Als Nebenbemerkung ist meine Antwort etwas vollständiger: Der Tag, an dem Sie so etwas tun möchten:

echo "Welcome $names!";

PHP interpretiert Ihren Code so, als ob Sie versuchen würden, die $namesVariable zu verwenden - die nicht existiert. - Beachten Sie, dass es nur funktioniert, wenn Sie "" nicht "für Ihre Zeichenfolge verwenden.

An diesem Tag müssen Sie Folgendes verwenden {}:

echo "Welcome {$name}s!"

Keine Notwendigkeit, auf Verkettungen zurückzugreifen.


Beachten Sie auch, dass Ihre erste Syntax:

echo "Welcome ".$name."!";

Könnte wahrscheinlich optimiert werden , um Verkettungen zu vermeiden, indem:

echo "Welcome ", $name, "!";

(Aber wie ich bereits sagte, ist das nicht wichtig ...)


1 - Es sei denn, Sie führen Hunderttausende von Verkettungen oder Interpolationen durch - und das ist wahrscheinlich nicht ganz der Fall.


3
Ausgezeichnet, vielen Dank! Es ist sehr schön zu wissen, dass ich meine Lieblingsmethode zum direkten Einfügen in die Zeichenfolge verwenden kann, und ich bin sehr dankbar, dass ich jetzt weiß, wie ich die Variable vom Rest des Stichs trennen kann, wenn ich die verwenden muss {}.
Web_Designer

64
Nur eine Anmerkung, dass das Trennen der Zeichenfolgenliterale und -variablen durch Kommas nur funktioniert echo, nirgendwo anders.
Colincameron

3
Ich möchte nur auf die Leistung hinweisen: time php -r '$string=""; for ($i=0;$i<199999;$i++){ $string = $string.$i; } print("Done!\n");'(Verkettung) verliert tatsächlich um etwa 300 Millisekunden (für 200.000 Elemente entspricht dies 1 Miliseconf pro tausend Elemente auf Ihrem Set ...). Das ist statistisches Rauschen, es ist unmöglich, einen Unterschied zu messen. In Anbetracht dessen, dass es besser lesbar ist, ist time php -r '$string=""; for ($i=0;$i<199999;$i++){ $string = "{$string}{$i}"; } print("Done!\n");'(Interpolation) der unbestrittene Gewinner ...
Fernando Cordeiro

1
Wenn Sie Interpolation verwenden möchten, müssen Sie doppelte Anführungszeichen verwenden.
Máxima Alekz

Ist es möglich, Funktionen innerhalb eines Strings zu verwenden? wie echo "Das ist {foo ()} schön"; ?
Strix25

17

Zeichenfolgen mit doppelten Anführungszeichen sind eleganter, da Sie Ihre Zeichenfolge nicht jedes Mal auflösen müssen, wenn Sie eine Variable einfügen müssen (wie dies bei Zeichenfolgen mit einfachen Anführungszeichen der Fall ist).

Wenn Sie jedoch den Rückgabewert einer Funktion einfügen müssen, kann dieser nicht in eine Zeichenfolge in doppelten Anführungszeichen eingefügt werden - selbst wenn Sie ihn mit geschweiften Klammern umgeben!

//syntax error!!
//$s = "Hello {trim($world)}!"

//the only option
$s = "Hello " . trim($world) . "!";

10
Sie können Funktionen semi-indirekt über PHP 5.3-Variablenfunktionen in Strings einfügen. $x = function() { ...}; $string = "hello {$x(blah blah blah)}", was die "Einschränkung" umgeht.
Marc B

5
@Marc Das ist cool, das wusste ich nicht! Sie können einer Variablen auch den Namen einer vorhandenen Funktion zuweisen und dasselbe tun:$x = 'trim'; $string = "hello {$x('blah blah blah')}";
Michael

3
das ist cool, aber extrem unlesbar, also muss man es trotzdem vermeiden.
Ihr gesunder Menschenverstand

2
$s = 'Hello ' . trim($world) .'!';Versuchen Sie, einfache Anführungszeichen zu verwenden, wenn in der Zeichenfolge nichts zu interpolieren ist. Dies verbessert die Leistung und kann als Konvention verwendet werden, um beide zu identifizieren
Sarath Sadasivan Pillai

9

Seit php4 können Sie einen String-Formatierer verwenden:

$num = 5;
$word = 'banana';
$format = 'can you say %d times the word %s';
echo sprintf($format, $num, $word);

Quelle: sprintf ()


Bei weitem die sicherste Option. +1 für bewährte Praktiken und allgemeine Konventionen, die mit anderen Sprachen übereinstimmen
Javier Arias


5

Unter dem Gesichtspunkt, Gedanken einfach , lesbar , konsistent und leicht verständlich zu machen (da Leistung hier keine Rolle spielt):

  • Die Verwendung eingebetteter Variablen in doppelten Anführungszeichen kann zu komplexen und verwirrenden Situationen führen, in denen Sie Objekteigenschaften, multidimentionale Arrays usw. einbetten möchten. Das heißt, beim Lesen eingebetteter Variablen können Sie im Allgemeinen nicht sofort 100% ig sicher sein, wie Sie sich endgültig verhalten .

  • Sie müssen häufig Krücken wie {}und \hinzufügen, was IMO Verwirrung stiftet und die Lesbarkeit der Verkettung nahezu gleichwertig macht, wenn nicht sogar besser.

  • Sobald Sie beispielsweise einen Funktionsaufruf um die Variable wickeln müssen htmlspecialchars($var), müssen Sie zur Verkettung wechseln.

  • AFAIK, Sie können keine Konstanten einbetten.

In einigen speziellen Fällen kann "doppelte Anführungszeichen mit Einbettung von Variablen" nützlich sein, aber im Allgemeinen würde ich mich für eine Verkettung entscheiden (wenn es zweckmäßig ist, einfache oder doppelte Anführungszeichen verwenden)


5

Ich weiß, dass diese Frage bereits eine gewählte Antwort hat, aber ich habe diesen Artikel gefunden , der offensichtlich zeigt, dass die String-Interpolation schneller funktioniert als die Verkettung. Es könnte für diejenigen hilfreich sein, die noch Zweifel haben.


3

Gehen Sie mit dem ersten und verwenden Sie einfache Anführungszeichen!

  1. Es ist einfacher zu lesen, was bedeutet, dass andere Programmierer wissen, was passiert
  2. Es funktioniert etwas schneller, so wie Opcodes erstellt werden, wenn PHP Ihren Quellcode zerlegt. Das wird im Grunde sowieso so sein, also helfen Sie ihm!
  3. Wenn Sie auch einfache Anführungszeichen anstelle von doppelten Anführungszeichen verwenden, steigern Sie Ihre Leistung noch mehr.

Die einzigen Situationen , wenn Sie doppelte Anführungszeichen verwenden sollten, ist , wenn Sie brauchen \r, \n, \t! Der Aufwand lohnt sich einfach nicht, um ihn in einem anderen Fall zu verwenden.

Sie sollten auch prüfen , PHP - Variablen Verkettung , phpbench.com für einige Benchmarks auf verschiedene Methoden der Dinge zu tun.


19
-1: Die Verwendung von einfachen Anführungszeichen hat keinerlei Auswirkungen auf die Leistung. Die verlinkte Seite zeigt Unterschiede zwischen den beiden Methoden in Mikrosekunden , dh 0,000001 Sekunden. Jede Datenbankabfrage wird hunderte Male dauern. Diese Debatte ist völlig sinnlos.
Pekka

Guter Punkt zum Erwähnen \r, \nund \tda andere Antworten dieses Bit nicht enthielten.
EvilReiko

2

Es ist nur Geschmackssache.
Verwenden Sie, was Sie wollen.

Die meiste Zeit benutze ich die zweite, aber es kommt darauf an.

Lassen Sie mich Ihnen auch vorschlagen, sich einen guten Editor zu besorgen, der eine Variable innerhalb eines Strings hervorhebt


Ich habe den benötigten Textbereich. PSPad rockt.
Web_Designer

2

Nicht verketten. Es wird nicht benötigt, wir Kommas, da das Echo mehrere Parameter annehmen kann

echo "Welcome ", $name, "!";

In Bezug auf einfache oder doppelte Anführungszeichen ist der Unterschied vernachlässigbar. Sie können Tests mit einer großen Anzahl von Zeichenfolgen durchführen, um diese selbst zu testen.


6
Dies gilt jedoch nur für das Echo. Versuchen Sie es für eine Variablenzuweisung und beobachten Sie, wie Ihr Code explodiert.
Marc B

1

Sie sollten den ersten wählen. Sie haben keinen Unterschied, außer der Leistung, bei der die erste im Vergleich zur zweiten die schnellste ist.

Wenn die Variable in PHP mit doppelten Anführungszeichen Zeit benötigt, um die Variable zu analysieren.

Überprüfen Sie diese einfachen oder doppelten Anführungszeichen für die variable Verkettung?

Dies ist ein weiteres Beispiel. Gibt es in PHP einen Leistungsvorteil für ein einfaches Anführungszeichen gegenüber einem doppelten Anführungszeichen?

Ich habe nicht verstanden, warum diese Antwort im obigen Link positiv bewertet wurde und warum diese Antwort abgelehnt wurde.

Wie ich schon sagte.

Sie können auch hier anschauen

Was ist schneller in PHP, einfachen oder doppelten Anführungszeichen?


5
-1 für vorzeitige Optimierung. Der Unterschied in der Leistung reicht nicht aus, um ein Faktor zu sein, es sei denn, Sie drucken millionenfach in einem Skript - und selbst dann wird jede andere Verarbeitung die zusätzlichen Sekunden, die Sie möglicherweise für das Drucken auf die eine oder andere Weise aufwenden, in den Schatten stellen . Der Hauptunterschied zwischen ihnen ist die Lesbarkeit (was mich dazu bringt, den zweiten Stil zu bevorzugen).
CHao

1
Ich kann versuchen, Ihre letzte Frage zu beantworten. Es gibt viele wilde Gerüchte in der PHP-Community und einige von ihnen sind sehr stark. Es ist ein großer Kampf, sie offenzulegen, und es braucht Zeit. Aber langsam ändert es sich. Die Antwort, mit der Sie verlinkt haben, ist also eine alte aus der Zeit, als es den Leuten egal war. Während in diesem Fall einige Leute aufgrund ihrer eigenen Erfahrung antworteten, nicht aufgrund eines Artikels, den sie lasen.
Ihr

Leistungsverlust ist falsch +1 @cHao. Hier ist ein Artikel mit den Metriken, die dies belegen. nikic.github.io/2012/01/09/…
Damian

1

Wenn Sie einen SQLBefehl ausführen möchten und Ihre Variablen Array-Mitglieder sind, sollten Sie keine einfachen Anführungszeichen innerhalb []des Arrays verwenden (wie folgt :) ['']; Wenn Sie diese Zeichenfolge beispielsweise als SQL-Befehl verwenden, erhalten Sie server error 500:

$con = mysqli_connect('ServerName', 'dbUsername', 'dbPassword');
mysqli_select_db($con, 'dbName')

//'ID' is auto increment field.
$sql = "INSERT INTO sampleTable (ID, TraceNo) VALUES ('','$sampleArray['TraceNo']')";
mysqli_query($con, $sql)

Die richtige Zeichenfolge lautet:

//'ID' is auto increment field.
$sql = "INSERT INTO sampleTable (ID, TraceNo) VALUES ('','$sampleArray[TraceNo]')";

Sie sollten stattdessen PDOs verwenden
s3c

0

Ich weiß, dass dies eine alte Frage ist, aber ich denke, jemand muss alle Vor- und Nachteile erwähnen:

Bessere Syntax : Das ist persönliche Präferenz.

Leistung : Kein Unterschied. Wie bereits erwähnt, ist das doppelte Anführungszeichen möglicherweise schneller, wenn unrealistisch viele Variablen verwendet werden.

Bessere Verwendung : Einfaches Anführungszeichen (meistens). Wie @Khez sagte, können Sie mit einem einfachen Anführungszeichen alles verketten, sogar Funktionsaufrufe und Variablenänderungen, wie folgt : echo 'hi ' . trim($name) . ($i + 1);. Das einzige , was doppelte Anführungszeichen tun kann , dass einzelne Anführungszeichen nicht tun kann ist die Nutzung von \n, \r, \tund gleichermaßen.

Lesbarkeit : Kein Unterschied (möglicherweise gelten persönliche Vorlieben).

Schreibbarkeit / Umschreibbarkeit / Debugging : In einzeiligen Anweisungen gibt es keinen Unterschied, aber wenn Sie mit mehreren Zeilen arbeiten, ist es einfacher, Zeilen beim Debuggen oder Schreiben zu kommentieren / zu kommentieren. Beispielsweise:

$q = 'SELECT ' .
     't1.col1 ' .
     ',t2.col2 ' .
   //',t3.col3 ' .
     'FROM tbl1 AS t1 ' .
     'LEFT JOIN tbl2 AS t2 ON t2.col2 = t1.col1 ' .
   //'LEFT JOIN tbl3 AS t3 ON t3.col3 = t2.col2 ' .
     'WHERE t1.col1 = ' . $x . ' ' .
     '  AND t2.col2 = ' . $y . ' ' .
   //'  AND t3.col3 = ' . $z . ' ' .
     'ORDER BY t1.col1 ASC ' .
     'LIMIT 10';

Weniger entkommen : Einfaches Anführungszeichen. Für einfache Anführungszeichen müssen Sie nur 2 Zeichen ( 'und \) maskieren. Für doppelte Anführungszeichen müssen Sie bei Bedarf 2 Zeichen ( ", \) und 3 weitere Zeichen ( $, {und }) maskieren.

Weniger Änderungen : Einfaches Anführungszeichen. Zum Beispiel, wenn Sie den folgenden Code haben:

echo 'Number ' . $i . '!';

Und Sie müssen 1 auf $ i erhöhen, damit es wie folgt aussieht:

echo 'Number ' . ($i + 1) . '!';

Für ein doppeltes Anführungszeichen müssen Sie dies jedoch ändern:

echo "Number $i!";

dazu:

echo "Number " . ($i + 1) . "!";

Fazit : Verwenden Sie, was Sie bevorzugen .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.