回显HTML代码与将其排除在PHP之外


Echoing HTML code vs. leaving it out of PHP

我应该更喜欢其中一个片段而不是另一个吗?

1.

function render()
{
    echo "<div>$content</div>";
}

阿拉伯数字。

function render()
{
    ?>
    <div><?= $content ?></div>
    <?php
}

两者都不是一个好主意。原因函数正在输出。尝试这样做:

function render( $content_, $style_ )
{
    $res = "<div{$style_}>$content_</div>";
    return $res;
}

然后:

echo render( "Content inside div", " style='color:red;'" )

原因:

  1. 函数是计算返回,它的主要目的是这个。
  2. 应用程序正在生成,它可以使用函数进行准备。
  3. 将来可能需要制作一些标头,好主意是在脚本末尾启动所有输出。使用像 Smarty 这样的模板,所以 - 将为您节省很多时间:)

作为一般规则,最好使构成应用程序的每个文件的内容尽可能整洁。由于PHP是一种模板语言,你可以拥有具有截然不同目的的PHP文件(考虑到包含纯HTML的文件是一个有效的PHP文件),我个人的偏好是:

如果您需要在代码中创建少量 HTML,请不要打开和关闭 PHP 标记。

例如,首选以下内容:

function render()
{
    echo "<div>$content</div>";
}

在此:

function render()
{
    ?><div><?= $content ?></div><?php
}

另请注意,在上面的代码片段中,我没有在 PHP close 标签之后或 PHP open 标签之前包含任何空格;通常空格在 HTML 中并不重要,但在两种情况下可能很重要:

  • 您希望拥有很好的缩进 HTML(有时在开发时会有所帮助)
  • 一个或多个空格字符与根本没有空格字符的存在会在 DOM 树中创建一个额外的文本节点,这可能很重要

如果你想在HTML中包含这种空格,你的源代码在任何情况下都会有点丑陋,但如果你使用关闭/打开标签方法,肯定会更丑陋。

在视图中隔离大段 HTML,并根据需要包含少量逻辑。

例如,首选以下内容:

<body>
  <div id="blah">
    <ul id="nav">
      <?php foreach ($navItems as $url => $title) : ?>
      <!--
      NOTE:
      You can opt to make the line below a single echo statement
      in PHP rather than HTML with values from PHP substituted
      in various places inside, and in this example it might even
      be better. However, if the output for each item is more complex
      than a li/a pair, it will be far more readable in this form.
      -->
      <li><a href="<?php echo $url ?>"><?php echo $title ?></a></li>
      <?php endforeach; ?>

在此:

$output = '<body><div id="blah"><ul id="nav">';
foreach ($navItems as $url => $title) {
    $output .= '<li><a href="'.$url.'">'.$title.'</a></li>
}
echo $output;