Hinweis: Es tut mir leid, wenn dies eine äußerst einfache Frage ist, aber ich bin etwas zwanghaft in Bezug auf die Formatierung meines Codes.
Ich habe eine Klasse, die eine Funktion hat, die eine Zeichenfolge zurückgibt, die den Haupttext einer E-Mail bildet. Ich möchte, dass dieser Text so formatiert wird, dass er in der E-Mail richtig aussieht, aber auch, damit mein Code nicht funky aussieht. Folgendes meine ich:
class Something
{
public function getEmailText($vars)
{
$text = 'Hello ' . $vars->name . ",
The second line starts two lines below.
I also don't want any spaces before the new line, so it's butted up against the left side of the screen.";
return $text;
}
}
es könnte aber auch geschrieben werden als:
public function getEmailText($vars)
{
$text = "Hello {$vars->name},\n\rThe second line starts two lines below.\n\rI also don't want any spaces before the new line, so it's butted up against the left side of the screen.";
return $text;
}
Aber wie sieht es mit neuen Linien und Wagenrückläufen aus? Was ist der Unterschied? Ist \n\n
das Äquivalent \r\r
oder \n\r
? Was soll ich verwenden, wenn ich eine Linienlücke zwischen Linien erstelle?
Dann gibt es die Möglichkeit der Ausgabepufferung und der Heredoc-Syntax.
Wie gehen Sie mit langen mehrzeiligen Zeichenfolgen in Ihren Objekten um?
Antworten:
Sie sollten HEREDOC oder NOWDOC verwenden.
Der Unterschied zwischen Heredoc und Nowdoc besteht darin, dass in einen Heredoc eingebetteter PHP-Code ausgeführt wird, während PHP-Code in Nowdoc unverändert ausgedruckt wird.
In diesem Fall hat $ text den Wert
My $var
.Hinweis: Vor dem Schließen
EOT;
sollten keine Leerzeichen oder Tabulatoren vorhanden sein. Andernfalls wird eine Fehlermeldung angezeigtquelle
EOT;
keine Leerzeichen davor geben.EOT;
sollten keine Leerzeichen oder Tabulatoren vorhanden sein. Andernfalls wird eine Fehlermeldung angezeigt.Ich benutze ein ähnliches System wie pix0r und ich denke, das macht den Code gut lesbar. Manchmal ging ich sogar so weit, die Zeilenumbrüche in doppelte Anführungszeichen zu setzen und für den Rest der Zeichenfolge einfache Anführungszeichen zu verwenden. Auf diese Weise heben sie sich vom Rest des Textes ab, und Variablen heben sich auch besser hervor, wenn Sie die Verkettung verwenden, anstatt sie in eine doppelte Anführungszeichenfolge einzufügen. Also könnte ich mit Ihrem ursprünglichen Beispiel so etwas machen:
In Bezug auf die Zeilenumbrüche sollten Sie bei E-Mails immer \ r \ n verwenden. PHP_EOL ist für Dateien gedacht, die unter demselben Betriebssystem verwendet werden sollen, auf dem PHP ausgeführt wird.
quelle
Ich benutze Vorlagen für Langtext:
email-template.txt enthält
In PHP mache ich das:
quelle
Das Hinzufügen
\n
und / oder\r
in der Mitte der Zeichenfolge und eine sehr lange Codezeile, wie im zweiten Beispiel, fühlen sich nicht richtig an: Wenn Sie den Code lesen, sehen Sie das Ergebnis nicht und müssen scrollen .In solchen Situationen verwende ich immer Heredoc (oder Nowdoc, wenn PHP> = 5.3 verwendet wird) : einfach zu schreiben, leicht zu lesen, keine superlangen Zeilen erforderlich, ...
Zum Beispiel :
Nur eins: Der Endmarker (und das '
;
' danach) muss das einzige in seiner Zeile sein: kein Leerzeichen / Tabulator davor oder danach!quelle
Sicher, Sie könnten HEREDOC verwenden, aber was die Lesbarkeit des Codes betrifft, ist es nicht wirklich besser als im ersten Beispiel, den String über mehrere Zeilen zu wickeln.
Wenn Sie wirklich möchten, dass Ihre mehrzeilige Zeichenfolge gut aussieht und gut zu Ihrem Code passt, würde ich empfehlen, Zeichenfolgen als solche zu verketten:
Dies ist möglicherweise etwas langsamer als HEREDOC oder eine mehrzeilige Zeichenfolge, passt jedoch gut zum Einzug Ihres Codes und erleichtert das Lesen.
quelle
Ich mag diese Methode etwas mehr für Javascript, aber es scheint sich zu lohnen, sie hier aufzunehmen, da sie noch nicht erwähnt wurde.
Bei kleineren Dingen finde ich es oft einfacher, mit Array-Strukturen zu arbeiten als mit verketteten Strings.
Verwandte: implodieren vs concat Leistung
quelle
Derjenige, der das glaubt
ist mehrzeilige Zeichenfolge ist falsch. Das sind zwei Zeichenfolgen mit Verkettungsoperator, keine mehrzeilige Zeichenfolge. Solche verketteten Zeichenfolgen können beispielsweise nicht als Schlüssel für vordefinierte Arrays verwendet werden. Leider bietet PHP keine echten mehrzeiligen Strings in Form von
Nur
HEREDOC
undNOWDOC
Syntax, die besser für Vorlagen geeignet ist, da verschachtelter Codeeinzug durch eine solche Syntax unterbrochen wird.quelle
Sie können auch verwenden:
quelle
In Bezug auf Ihre Frage zu Zeilenumbrüchen und Wagenrückläufen:
Ich würde empfehlen, die vordefinierte globale Konstante PHP_EOL zu verwenden, da sie alle plattformübergreifenden Kompatibilitätsprobleme löst.
Diese Frage wurde bereits zuvor auf SO gestellt. Weitere Informationen finden Sie unter " Wann verwende ich die PHP-Konstante PHP_EOL ".
quelle
Niemand hier schien diese Frage tatsächlich zu beantworten, also bin ich hier.
\r
steht für "Wagenrücklauf"\n
steht für "Zeilenvorschub"Der eigentliche Grund für sie geht auf Schreibmaschinen zurück. Während Sie tippten, rutschte der Wagen langsam Zeichen für Zeichen rechts von der Schreibmaschine. Wenn Sie am Ende der Zeile angekommen sind, geben Sie den Wagen zurück und wechseln dann zu einer neuen Zeile . Um zur neuen Zeile zu gelangen, betätigen Sie einen Hebel, der die Zeilen dem Typschreiber zuführt. Daher wurden diese Aktionen zusammen als Wagenrücklaufleitungsvorschub bezeichnet . Also ganz wörtlich:
Ein Zeilenvorschub
\n
bedeutet, zur nächsten Zeile zu wechseln.Ein Wagenrücklauf
\r
bedeutet, den Cursor an den Zeilenanfang zu bewegen.Letztendlich
Hello\n\nWorld
sollte folgende Ausgabe auf dem Bildschirm angezeigt werden:Wo wie
Hello\r\rWorld
sollte in der folgenden Ausgabe führen .Nur wenn Sie die 2 Zeichen kombinieren
\r\n
, haben Sie das gemeinsame Verständnis der bekannten Linie. IEHello\r\nWorld
sollte führen zu:Und
\n\r
würde natürlich zu der gleichen visuellen Ausgabe führen wie\r\n
.Ursprünglich nahmen Computer
\r
und\n
im wahrsten Sinne des Wortes. Heutzutage ist die Unterstützung für den Wagenrücklauf jedoch gering. Normalerweise können Sie auf jedem System davonkommen, wenn Sie es\n
alleine verwenden. Es hängt nie vom Betriebssystem ab, aber es hängt davon ab, in was Sie die Ausgabe anzeigen.Trotzdem würde ich immer raten,
\r\n
wo immer du kannst!quelle