Лучшие практики: работая с длинными, многострочными строками в PHP?

Если Вы используете SVN для управления исходным кодом, определенно получаете VisualSVN. Это включает взаимодействия TortoiseSVN из IDE Visual Studio.

я также повторяю комментарий Resharper. Розничная цена немного крута, но если Вы - студент или иначе с точки зрения образования связанный, это на самом деле довольно дешево.

170
задан DC Slagel 24 May 2019 в 05:43
поделиться

6 ответов

Вы должны использовать HEREDOC или NOWDOC.

$var = "some text";
$text = <<<EOT
  Place your text between the EOT. It's
  the delimiter that ends the text
  of your multiline string.
  $var
EOT;

Разница между Heredoc и Nowdoc заключается в том, что код PHP, встроенный в heredoc, выполняется, а код PHP в Nowdoc будет распечатан как есть.

$var = "foo";
$text = <<<'EOT'
  My $var
EOT;

В этом случае $ text будет иметь значение My $ var .

Примечание: перед закрывающим EOT; не должно быть пробелов или табуляции. иначе вы получите сообщение об ошибке

271
ответ дан 23 November 2019 в 20:47
поделиться

Я использую шаблоны для длинный текст:

email-template.txt содержит

hello {name}!
how are you? 

В PHP я делаю так:

$email = file_get_contents('email-template.txt');
$email = str_replace('{name},', 'Simon', $email);
25
ответ дан 23 November 2019 в 20:47
поделиться

Я использую аналогичную систему, что и pix0r, и думаю, что это делает код вполне читаемым. Иногда я даже разделял разрывы строк в двойных кавычках и использовал одинарные кавычки для остальной части строки. Таким образом, они выделяются среди остального текста, а переменные также выделяются лучше, если вы используете конкатенацию, а не вставляете их в строку с двойными кавычками. Поэтому я мог бы сделать что-то вроде этого с вашим исходным примером:

$text = 'Hello ' . $vars->name . ','
      . "\r\n\r\n"
      . 'The second line starts two lines below.'
      . "\r\n\r\n"
      . '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;

Что касается разрывов строк, в электронной почте вы всегда должны использовать \ r \ n. PHP_EOL предназначен для файлов, которые предназначены для использования в той же операционной системе, в которой работает php.

44
ответ дан 23 November 2019 в 20:47
поделиться

Добавление \ n и / или \ r в середине строки и наличие очень длинной строки кода, как во втором примере , кажется неправильным: когда вы читаете код, вы не видите результат, и вам нужно прокручивать.

В подобных ситуациях я всегда использую Heredoc (или Nowdoc, если используете PHP > = 5.3) : легко писать, легко читать, не нужны сверхдлинные строки, ...

Например:

$var = 'World';
$str = <<<MARKER
this is a very
long string that
doesn't require
horizontal scrolling, 
and interpolates variables :
Hello, $var!
MARKER;

Только одно: конечный маркер (и ' ; 'после него) должно быть единственное в его строке: без пробела / табуляции до или после!

19
ответ дан 23 November 2019 в 20:47
поделиться

Конечно, вы могли бы использовать HEREDOC, но с точки зрения читаемости кода он ничем не лучше, чем первый пример, перенос строки на несколько строк.

Если вы действительно хотите, чтобы ваш multi -строчная строка, чтобы хорошо выглядеть и хорошо сочетаться с вашим кодом, я бы рекомендовал объединять строки вместе как таковые:

$text = "Hello, {$vars->name},\r\n\r\n"
    . "The second line starts two lines below.\r\n"
    . ".. Third line... etc";

Это может быть немного медленнее, чем HEREDOC или многострочная строка, но она будет хорошо сочетаться с отступами вашего кода и облегчить чтение.

12
ответ дан 23 November 2019 в 20:47
поделиться

Что касается вашего вопроса о переводе строки и возврате каретки:

Я бы рекомендуется использовать предопределенную глобальную константу PHP_EOL , поскольку она решит любые проблемы межплатформенной совместимости.

Этот вопрос был поднят на SO заранее, и вы можете узнать больше информации, прочитав " Когда делать Я использую константу PHP PHP_EOL "

0
ответ дан 23 November 2019 в 20:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: