最佳实践:在PHP中使用长的多行字符串?
注意:如果这是一个非常简单的问题,我很抱歉,但我对代码的格式有点强迫性 我有一个类,它有一个返回字符串的函数,该字符串将构成电子邮件的正文。我希望这个文本的格式,使它看起来正确的电子邮件,但也使我的代码看起来不时髦。我的意思是:最佳实践:在PHP中使用长的多行字符串?,php,string,Php,String,注意:如果这是一个非常简单的问题,我很抱歉,但我对代码的格式有点强迫性 我有一个类,它有一个返回字符串的函数,该字符串将构成电子邮件的正文。我希望这个文本的格式,使它看起来正确的电子邮件,但也使我的代码看起来不时髦。我的意思是: class Something { public function getEmailText($vars) { $text = 'Hello ' . $vars->name . ", The second line starts
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
?在创建线之间的线间距时,应该使用哪种方法
还有输出缓冲和herdoc语法选项
如何处理在对象中使用长多行字符串的问题?您应该使用或
在这种情况下,$text
将具有值“My$var”
,而不是“My foo”
注意事项:
- 关闭前<代码>EOT代码>不应该有空格或制表符。否则您将得到一个错误
- 包含文本的字符串/标记(<代码> EOT < /代码>)是任意的,也就是说,可以使用其他字符串,例如“代码> > p>在字符串的中间添加<代码> \n>代码>和/或<代码> \r>代码,并且具有非常长的代码行,如在第二示例中,感觉不正确:当您读取代码时,看不到结果,你必须滚动
在这种情况下,我总是使用herdoc(如果使用PHP>=5.3,则使用Nowdoc):易于编写,易于阅读,不需要超长的行
例如:
$var = 'World'; $str = <<<MARKER this is a very long string that doesn't require horizontal scrolling, and interpolates variables : Hello, $var! MARKER;
$var='World';
$str=我对长文本使用模板: email-template.txt包含
在PHP中,我这样做:hello {name}! how are you?
$email = file_get_contents('email-template.txt'); $email = str_replace('{name},', 'Simon', $email);
关于您关于换乘和换乘返回的问题: 我建议使用预定义的全局常量PHP\u EOL,因为它将解决任何跨平台兼容性问题
这个问题已经提前提出了,您可以通过阅读“了解更多信息。当然,您可以使用herdoc,但就代码可读性而言,它实际上并不比第一个示例更好,它将字符串包装成多行 如果您真的希望多行字符串看起来很好,并且与代码配合得很好,我建议将字符串连接在一起,如下所示:$text = "Hello, {$vars->name},\r\n\r\n" . "The second line starts two lines below.\r\n" . ".. Third line... etc";
这可能比herdoc或多行字符串稍慢,但它将与代码的缩进配合良好,并使其更易于阅读。我使用与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的同一操作系统中使用的文件。相信这一点的人
是多行字符串错误。这是两个带有连接运算符的字符串,而不是多行字符串。例如,这样的连接字符串不能用作预定义数组的键。不幸的是,php并没有以字符串的形式提供真正的多行字符串"abc\n" . "def\n"
"abc\n" "def\n"
只有
和herdoc
语法更适合模板,因为嵌套的代码缩进被这种语法打破了。对于Javascript,我更喜欢这种方法,但它似乎值得包含在这里,因为它还没有被提及NOWDOC
对于较小的内容,我发现与串联字符串相比,使用数组结构通常更容易 相关的: 但是,新的线路和运输返回怎么办?有什么区别?\n\n是否等同于\r\r或\n\r?在创建线之间的线间距时,应该使用哪种方法 这里似乎没有人真正回答这个问题,所以我来了$var = "pizza"; $text = implode(" ", [ "I love me some", "really large", $var, "pies.", ]); // "I love me some really large pizza pies."
表示“回车”\r
表示“换行” 真正的原因要追溯到打字机。当你打字时,“回车”会一个字符一个字符地慢慢滑到打字机的右边。当你到达终点时,你将返回车厢,然后转到新的一行。要转到新行,您需要翻转一个杠杆,将行输入打字机。因此,这些动作组合在一起称为回车线进给。从字面上说: 换行符,\n
,表示移动到下一行 回车符\n
表示将光标移动到行首 最终,\r
将在屏幕上显示以下输出:Hello\n\nWorld
其中asHello World
应导致 只有在组合这两个字符时,您才能对已知行有共同的理解。例如,Hello\r\rWorld
应导致:Hello\r\nWorld
当然,Hello World
将产生与\n\r
相同的视觉输出 最初,计算机从字面上理解为\r\n
和\r
。然而,如今对马车返回的支持很少。通常在每个系统上,您都可以单独使用\n
。它永远不取决于操作系统,但它确实取决于您在其中查看输出的内容 不过我还是建议您尽可能地使用\n
您还可以使用:\r\n
<?php ob_start(); echo "some text"; echo "\n"; // you can also use: ?> some text can be also written here, or maybe HTML: <div>whatever<\div> <?php echo "you can basically write whatever you want"; // and then: $long_text = ob_get_clean();
一些文本也可以写在这里,也可以是HTML: 无论什么
我一直认为\n是Unix中的新行\r是OS/X之前MacOS上的新行,\r\n是Windows上的新行。另外,考虑到这将是一个Hello World
<?php ob_start(); echo "some text"; echo "\n"; // you can also use: ?> some text can be also written here, or maybe HTML: <div>whatever<\div> <?php echo "you can basically write whatever you want"; // and then: $long_text = ob_get_clean();