我喜欢HEREDOC语法,例如,对于生成的HTML的边缘情况,不值得放到模板中。
不过,唯一让我恼火的是,heredoc字符串的内容和结束标记都附着在第一列上。这会搞乱嵌套的代码布局:
class myclass
{
function __construct()
{
$a = some_code();
$b = some_more_code();
$x = <<<EOT
line1
line2
line3
line4
EOT;
$c = even_more_code();
$b = still_more_code();
...
...
...你明白我的意思吗。
现在,这可能不是使用普通的HEREDOC可以解决的。有人解决过这个问题吗?我的梦想是拥有自动缩进的HEREDOC语法。但我猜,如果不为源文件编写一些预编译器,这是不可能的。
我说的对吗?
发布于 2018-07-04 11:46:05
谢天谢地,这个特性终于通过RFC:Flexible Heredoc and Nowdoc Syntaxes在php7.3中实现了。
所以现在你的例子可以清晰地写成:
class myclass
{
function __construct()
{
$a = some_code();
$b = some_more_code();
$x = <<<EOT
line1
line2
line3
line4
EOT;
$c = even_more_code();
$b = still_more_code();
}
}发布于 2010-02-21 20:54:43
这也是我经常遇到的一个问题:当我使用heredoc时,代码缩进得不好,我真的很喜欢heredoc :-(
一个“更大的”问题是,当你选择一整块代码时,按"tab“(或IDE中的任何等效代码)来进一步缩进它,因为你在它周围添加了一个条件或任何东西……它打破了heredoc字符串:您必须手动取消缩进:-(
不幸的是,我从来没有见过像你描述的这样的工具...
我想,一种解决方案是将heredoc字符串放在另一个文件中,并包含它-- include之类的内容可以正常缩进;但这也意味着要加载多一个文件,这会使代码不那么清晰。
发布于 2012-06-16 21:36:52
你不能在PHP中输入heredocs或nowdocs。这是我的解决方法:
function foo() {
$a = 123;
$b = 456;
$sum = $a + $b;
$html = "
<div>
<h1>sum a, b</h1>
Number a is $a, number b is $b<br>
a+b equals <b>$sum<b>
</div>
";
echo $html;
}这会将空格添加到生成的html代码中,但是如果您使用mod_pagespeed或类似的apache mods,您的服务器将删除所有不必要的空格。
您可以对多行sql查询使用相同的技术:
function bar($sql, $id) {
$q= "
SELECT
name
, address
, phone
FROM users
WHERE id = '$id' -- possible mysql inyection
LIMIT 1
";
$sql->query($q);
}代码增加了可读性。它对性能没有影响,您可以注释复杂的SQL查询(使用#或--)
https://stackoverflow.com/questions/2305869
复制相似问题