如何在PHP中格式化长字符串的HTML是最佳方式?

4

我知道这是一个非常主观的问题,但为了最佳实践(和可读性),我似乎找不到最好的方法来格式化长字符串的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个回答

9
您可以跳出 PHP 直接输入 HTML:
<?php $var = "foo"; ?>
<div>
  <ul>
    <li>Foo</li>
  </ul>
</div>
<?php $foo = "var"; ?>

如果你只是在进行echo/print操作,我认为这种方法更加简洁。此外,在HTML本身中你不需要运行并转义单引号/双引号。
如果你需要将HTML存储到一个变量中,你可以使用HEREDOC
$str = <<<EOD
<div>
  <ul>
    <li>Foo</li>
  </ul>
</div>
EOD;

是的,我也这样做,但我特别指的是那些需要将长字符串HTML嵌入PHP中的情况(例如用于AJAX函数)。我对很多东西还很陌生,但在我看来,这种方法只能让你走得更远,而且有时你只能将大量的HTML字符串嵌入PHP中,除非我完全错了... - dclowd9901
@dclowd9901:你使用echo的例子并不需要字符串本身在PHP中。使用AJAX时,你只是发送纯文本。所以无论它最初是HTML还是打印的PHP字符串,都没有区别。希望这可以帮到你! - Sampson

3
为什么不直接将PHP嵌入HTML中?这就是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

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仍然很尴尬)。

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>';

2

我更倾向于使用像Code Igniter这样的MVC架构来将表现和逻辑分离。基本上,所有的模板都是单独存储的,并且你可以使用这里描述的PHP替代语法结构来格式化你的HTML。


1
最好的方法是使用模板系统,您可以在其中将逻辑与呈现分开。在模板中,您只需要包含以下内容:
<html>
<body>

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

</body>
</html>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接