Примечание: извините, если это очень простой вопрос, но я несколько одержимо компульсивен в отношении форматирования моего кода.
У меня есть класс, который имеет функцию, которая возвращает строку, которая будет составлять основной текст письма. Я хочу, чтобы этот текст был отформатирован так, чтобы он выглядел прямо в электронном письме, но также и чтобы мой код не выглядел в стиле фанк. Вот что я имею в виду:
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;
}
}
но это также может быть записано как:
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;
}
но как обстоят дела с новыми линиями и возвратом каретки? Какая разница? Это \n\n
эквивалент \r\r
или \n\r
? Что я должен использовать, когда я создаю разрыв между строками?
Тогда есть опция буферизации вывода и синтаксиса heredoc.
Как вы справляетесь с использованием длинных многострочных строк в ваших объектах?
Ответы:
Вы должны использовать HEREDOC или NOWDOC.
Разница между Heredoc и Nowdoc заключается в том, что код PHP, встроенный в heredoc, выполняется, а код PHP в Nowdoc будет распечатан как есть.
В этом случае $ text будет иметь значение
My $var
.Примечание: перед закрытием
EOT;
не должно быть пробелов или табуляции. в противном случае вы получите ошибкуисточник
EOT;
пробелов.EOT;
не должно быть пробелов или табуляции. в противном случае вы получите ошибку.Я использую подобную систему как pix0r, и я думаю, что это делает код вполне читабельным. Иногда я на самом деле зашел бы настолько далеко, что разделял разрывы строк в двойных кавычках и использовал одинарные кавычки для остальной части строки. Таким образом, они выделяются из остального текста, а переменные также выделяются лучше, если вы используете конкатенацию, а не вставляете их в двойные кавычки. Так что я мог бы сделать что-то вроде этого с вашим оригинальным примером:
Что касается разрывов строк, для электронной почты вы всегда должны использовать \ r \ n. PHP_EOL для файлов, которые предназначены для использования в той же операционной системе, на которой работает php.
источник
Я использую шаблоны для длинного текста:
email-template.txt содержит
В PHP я делаю это:
источник
Добавлять
\n
и / или\r
в середине строки и иметь очень длинную строку кода, как во втором примере, кажется неправильным: когда вы читаете код, вы не видите результат, и вам приходится прокручивать ,В подобных ситуациях я всегда использую Heredoc (или Nowdoc, если использую PHP> = 5.3) : легко писать, легко читать, нет необходимости в длинных строках, ...
Например :
Только одно: конечный маркер (и '
;
' после него) должен быть единственным на его строке: ни пробела, ни табуляции ни до, ни после!источник
Конечно, вы можете использовать HEREDOC, но с точки зрения читабельности кода это не намного лучше, чем в первом примере, заключая строку в несколько строк.
Если вы действительно хотите, чтобы ваша многострочная строка хорошо выглядела и хорошо сочеталась с вашим кодом, я бы порекомендовал объединить строки вместе:
Это может быть немного медленнее, чем HEREDOC или многострочная строка, но она будет хорошо сочетаться с отступами вашего кода и облегчит чтение.
источник
Мне больше нравится этот метод для Javascript, но его стоит включить, потому что он еще не был упомянут.
Что касается мелких вещей, я считаю, что часто легче работать со структурами массивов по сравнению со связанными строками.
Связано: взорваться против конкат производительности
источник
Тот, кто считает, что
многострочная строка неверна. Это две строки с оператором конкатенации, а не многострочная. Такие объединенные строки нельзя использовать, например, в качестве ключей предопределенных массивов. К сожалению, php не предлагает реальные многострочные строки в виде
только
HEREDOC
иNOWDOC
синтаксис, который больше подходит для шаблонов, поскольку отступ вложенного кода нарушается таким синтаксисом.источник
Вы также можете использовать:
источник
Что касается вашего вопроса о переводе строки и возврате каретки:
Я бы порекомендовал использовать предопределенную глобальную константу PHP_EOL, поскольку она решит любые проблемы кросс-платформенной совместимости.
Этот вопрос был поднят на SO заранее, и вы можете узнать больше информации, прочитав « Когда я использую PHP константу PHP_EOL »
источник
Похоже, здесь никто не ответил на этот вопрос, поэтому я здесь.
\r
представляет «возврат каретки»\n
представляет «перевод строки»Истинная причина для них восходит к пишущим машинкам. Когда вы печатаете, «каретка» будет медленно скользить символ за символом вправо от пишущей машинки. Когда вы дойдете до конца линии, вы вернете карету и перейдете на новую линию . Чтобы перейти на новую строку, вы должны щелкнуть рычагом, который подает строки в пишущий тип. Таким образом, эти действия, вместе взятые, были названы переводом строки возврата каретки . Так что буквально
Перевод строки
\n
, означает переход к следующей строке.Возврат каретки
\r
, означает перемещение курсора в начало строки.В конечном итоге
Hello\n\nWorld
должен появиться следующий вывод на экран:Где как
Hello\r\rWorld
должно привести к следующему выводу .Только при объединении двух символов
\r\n
у вас есть общее понимание известной линии. IEHello\r\nWorld
должен привести к:И, конечно
\n\r
, приведет к тому же визуальному выводу, что и\r\n
.Изначально компьютеры взяли
\r
и в\n
буквальном смысле слова. Однако в наши дни поддержка возврата каретки невелика. Обычно в каждой системе вы можете использовать\n
ее самостоятельно. Это никогда не зависит от ОС, но зависит от того, что вы просматриваете.Тем не менее я всегда советую использовать
\r\n
везде, где вы можете!источник