在PHP中格式化长字符串HTML的最佳方法是什么?

时间:2010-03-19 14:59:02

标签: php code-formatting

我知道这确实是一个主观问题,但对于最佳实践(和可读性),我似乎无法修复格式化长字符串HTML的最佳方法。我通常这样做:

echo '
<div>
    <p>Content Inside</p>
    <div class="subbox">
        <ul>
            <li>etc.</li>
            <li>etc.</li>
            <li>etc.</li>
            <li>etc.</li>
        </ul>
    </div>
</div>
';

但我仍然不喜欢结果,特别是如果它出现在一大块代码的中间。它只是感觉很乱。

6 个答案:

答案 0 :(得分:9)

您可以跳出PHP并直接输入HTML:

<?php $var = "foo"; ?>
<div>
  <ul>
    <li>Foo</li>
  </ul>
</div>
<?php $foo = "var"; ?>

如果您所做的只是回音/打印,我认为这更清洁。此外,您不需要在HTML本身内运行并转义单引号/双引号。

如果您需要将HTML存储在变量中,可以使用HEREDOC

$str = <<<EOD
<div>
  <ul>
    <li>Foo</li>
  </ul>
</div>
EOD;

答案 1 :(得分:3)

为什么不在PHP中嵌入PHP?这就是PHP最初设计用于工作的方式。

// PHP goes here
?>
<div>
    <p>Content Inside</p>
    <div class="subbox">
        <ul>
            <li>etc.</li>
            <li>etc.</li>
            <li>etc.</li>
            <li>etc.</li>
        </ul>
    </div>
</div>
<?php
// More PHP here

答案 2 :(得分:3)

旧派Perl风格heredoc也有效:

echo <<<EOL
<div>
    <p>Content Inside</p>
    <div class="subbox">
        <ul>
            <li>etc.</li>
            <li>etc.</li>
            <li>etc.</li>
            <li>etc.</li>
        </ul>
    </div>
</div>
EOL;

使用多个<?php ?>块更简洁,但是如果你在类定义中,那么heredoc可能不那么笨拙(尽管从类定义中打印HTML只不过是尴尬)。

答案 3 :(得分:2)

我会这样做:

echo '<div>
         <p>Content Inside</p>
         <div class="subbox">
             <ul>
                 <li>etc.</li>
                 <li>etc.</li>
                 <li>etc.</li>
                 <li>etc.</li>
            </ul>
         </div>
      </div>';

答案 4 :(得分:2)

我更喜欢像Code Igniter这样的MVC架构,用于将表示与逻辑分离。基本上,所有模板都是单独存储的,您可以使用here所述的PHP备用语法结构来格式化HTML。

答案 5 :(得分:1)

最好的方法是使用模板系统,您可以将逻辑与演示分开。在模板中,您只有以下内容:

<html>
<body>

<h1><?php echo $title; ?></h1>
<p><?php echo $myparagraph; ?></p>

</body>
</html>