PHP sprintf vs. echo
Ich habe eine Frage zu früher heute Abend - PHP WordPress-quotes-Problem, wo einige Zitate waren mir verursachen einige Probleme.
Eine Antwort gepostet wurde, was darauf hindeutet, mit echo sprintf. Dieser sah sehr sauber und kümmerte sich um jede variable, die & zitieren Probleme, die auftreten können. Meine Frage ist, was ist der Nachteil der Verwendung von sprintf? Wenn ja, welche?
Warum verwenden wir echo
wenn es in der Regel zu Problemen mit dem mischen von HTML und PHP. Für diese Referenz wurde die echo-Anweisung:
echo "<img src='"; bloginfo('template_url'); echo "img/" . $f['mainImage'] . ".png' />";
und echo & sprintf:
echo sprintf(
'<img src="%s/img/%s.png" />',
get_bloginfo('template_url'),
$f['mainImage']
);
- Warum
echo sprintf()
anstatt einfachprintf()
? - Ich Stimme mit Charles Brunet. Durch die Art und Weise Sie verwenden zwei verschiedene Funktionen in Ihrem code-Beispiele. (bloginfo mit führt seinen eigenen echo/print und get_bloginfo, das die Informationen Zurückgibt). Die erste könnte man auch:
echo "<img src='" . get_bloginfo('template_url') . "img/" . $f['mainImage'] . ".png' />";
- Persönlich, da Sie mit doublequotes sowieso... zu bereinigen, die echo-Anweisung würde ich ändern, echo include eine Menge weniger concats, aber ... nur eine zufällige Vorliebe
echo "<img src='".get_bloginfo('template_url')."img/{$f['mainImage']}.png' />";
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist nicht die echo-Anweisung, die "Ursachen" der Probleme, so ist es das fehlen von Informationen, die Neulinge, also werde ich versuchen, Sie zu erklären.
Gibt es vier Möglichkeiten, von der Angabe eines string in php:
Mit einem einzigen Zitat
$str = 'Hello World. This might be a php $variable';
echo $str; //Outputs: Hello World. This might be a php $variable
Da der string war eingewickelt in einfache Anführungszeichen, php-engine wird nicht versuchen, Sie zu interpretieren $variable als eigentliche variable und der Inhalt dessen, was Sie sehen in den Zitaten wird durchgeleitet.
echo $str; //Outputs: Hello World. This will be interpreted as random text
In diesem Beispiel wird php versuchen, einer Variablen mit dem Namen $variable und verwenden Ihrer Inhalte in der Zeichenfolge.
Heredoc ist nützlich für Dinge wie das, was Sie tun wollten - Sie haben einen mix von Variablen, einfache Anführungszeichen, doppelte Anführungszeichen und escaping all das kann ein Chaos. Daher, gute php-Menschen realisiert, die folgende syntax für uns:
Was passieren wird, ist, dass die PHP-engine wird versuchen, Sie zu interpretieren-Variablen (und Funktionen, aber die werde ich nicht posten Beispiele auf, wie das geht, da es php.net), aber Sie wickelte den string mit <<
Ist es das gleiche wie mit einer single-quoted string - keine variable Ersetzungen auftreten, und geben Sie etwas wie nowdoc - einfach wickeln Sie das Trennzeichen mit Apostroph-Zeichen, wie im Beispiel gezeigt.
Wenn Sie in der Lage sind zu verstehen, dass diese vier Prinzipien, Probleme mit Anführungszeichen in den string sollte Weggehen 🙂
Der größte Nachteil ist die Geschwindigkeit. Aber in den meisten Fällen, ist es egal. Wäre es nur, wenn Sie drucken viel von Informationen, in einer großen Schleife.
sprintf ist eine tolle Funktion, und Sie sollten es nutzen.
Aber mit printf () statt echo sprintf wäre besser.
Dem sprintf war wohl vorgeschlagen, für die Formatierungsfunktionen es gibt Sie. Ich bin mir nicht bewusst, irgendwelche performance-Nachteil zu sprintf; es ist wahrscheinlich, eine identische C rufen Sie an unter der Haube. Ich Stimme mit Wiseguy die Einschätzung aber, dass printf ist ein einfacher Weg, um das gleiche zu tun.
Ersten
(sprintf)
flexibler ist und eine echte Funktion. Letzteres ist eine Sprache konstruieren, weniger flexibel, aber einfach und schnell zu schreiben.'echo','sprintf' und 'drucken' sind keine Funktionen, sondern Sprachkonstrukte
'sprintf' nimmt die Eingabe unterschiedlich: Sie können eine format-string und Listen Sie dann alle erforderlichen input.
Zur gemeinsamen Fällen ist der Unterschied nicht auf den ersten Blick offensichtlich, und oft auch nicht relevant. In einigen speziellen Fällen
'sprintf'
besser sein kann.Aber
echo
Prozesse schneller alssprintf.
Wenn man sich genau an die Antwort, die Sie verweisen, das Update hatte nichts zu tun mit
sprintf
war es mitget_bloginfo()
stattbloginfo()
; der ehemalige gibt eine Zeichenfolge anstelle hallte es.Dem sprintf ist eher eine style Sache, die -- wie einige Leute zu ersetzen, deren Variablen mit c-style
%s
format-strings, andere möchten unter Verwendung der PHP-Variablen-expansion in string-literalen.