注意:如果这是一个非常简单的问题,我很抱歉,但我对代码的格式有点强迫.
我有一个类,其函数返回一个字符串,该字符串将构成电子邮件的正文.我希望这个文本格式化,以便它在电子邮件中看起来正确,但也因此它不会使我的代码看起来很时髦.这就是我的意思:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
但它也可以写成:
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;
}
Run Code Online (Sandbox Code Playgroud)
但新线和回车的交易是什么?有什么不同?是\n\n相当于\r\r或\n\r?当我在线之间创建线间隙时,我应该使用哪个?
然后是输出缓冲和heredoc语法的选项.
你如何处理在对象中使用长多行字符串?
hal*_*dan 272
你应该使用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;
Run Code Online (Sandbox Code Playgroud)
Heredoc和Nowdoc之间的区别在于嵌入在heredoc中的PHP代码被执行,而Nowdoc中的PHP代码将按原样打印出来.
$var = "foo";
$text = <<<'EOT'
My $var
EOT;
Run Code Online (Sandbox Code Playgroud)
在这种情况下,$ text将具有该值My $var.
注意:在关闭之前,EOT;应该没有空格或制表符.否则你会收到错误
Cvu*_*nen 44
我使用类似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;
Run Code Online (Sandbox Code Playgroud)
关于换行符,通过电子邮件,您应该始终使用\ r \n.PHP_EOL适用于在运行php的同一操作系统中使用的文件.
pow*_*tac 25
我使用模板作为长文本:
email-template.txt包含
hello {name}!
how are you?
Run Code Online (Sandbox Code Playgroud)
在PHP中我这样做:
$email = file_get_contents('email-template.txt');
$email = str_replace('{name},', 'Simon', $email);
Run Code Online (Sandbox Code Playgroud)
Pas*_*TIN 19
添加\n和/或\r在字符串的中间,并且具有很长的代码行,如第二个示例中所示,感觉不对:当您阅读代码时,您看不到结果,并且您必须滚动.
在这种情况下,我总是使用Heredoc (Or 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;
Run Code Online (Sandbox Code Playgroud)
只有一件事:结束标记(以及之后的' ;')必须是其唯一的东西:之前或之后没有空格/标签!
pix*_*x0r 12
当然,您可以使用HEREDOC,但就代码可读性而言,它并不比第一个示例更好,将字符串包装在多行中.
如果你真的希望你的多行字符串看起来很好并且你的代码很好用,我建议你把这些字符串连接起来:
$text = "Hello, {$vars->name},\r\n\r\n"
. "The second line starts two lines below.\r\n"
. ".. Third line... etc";
Run Code Online (Sandbox Code Playgroud)
这可能比HEREDOC或多行字符串略慢,但它会很好地与代码的缩进一起流动并使其更易于阅读.
我喜欢这种方法对于Javascript更多,但它似乎值得包括在这里,因为它还没有被提及.
$var = "pizza";
$text = implode(" ", [
"I love me some",
"really large",
$var,
"pies.",
]);
// "I love me some really large pizza pies."
Run Code Online (Sandbox Code Playgroud)
对于较小的东西,我发现与串联字符串相比,使用数组结构通常更容易.
| 归档时间: |
|
| 查看次数: |
183963 次 |
| 最近记录: |