【问题标题】:What is the best practice to use when using PHP and HTML?使用 PHP 和 HTML 时使用的最佳实践是什么?
【发布时间】:2010-11-10 19:03:42
【问题描述】:

我设计网站已经有一段时间了,但是在使用 PHP 和 HTML 时,有一件事情我一直不太确定。将整个文档放在 PHP 和 echo HTML 中会更好吗:

<?php
  doSomething();
  echo "<div id=\"some_div\">Content</div>";
?>

或者有一个这样的 HTML 文件,只需添加 PHP:

<html>
<body>
  <?php doSomething(); ?>
  <div id="some_div">Content</div>
</body>
</html>

echo HTML 似乎更整洁,尤其是在整个页面使用大量 PHP 时,但这样做会丢失 HTML 的所有格式,即 IDE 中的颜色等。

【问题讨论】:

  • 我不是 PHP 方面的专家,但最好的方法是让你在不同的文件中编写 PHP 代码,我不知道对我来说更清楚。

标签: php html formatting


【解决方案1】:

对此有不同的看法。我觉得有两个好办法:

  • 使用像Smarty 这样的模板引擎,将代码和表示完全分离。

  • 使用您的第二个示例,但是当将 PHP 混合到 HTML 中时,仅输出变量。在输出任何内容或单独的文件之前,在一个块中执行所有代码逻辑。像这样:

    <?php $content = doSomething();
       // complex calculations
    ?>
    <html>
    <body>
      <?php echo $content; ?>       
      <div id="some_div">Content</div>
    </body>
    </html>
    

大多数成熟的应用程序框架都有自己的风格;在这种情况下,通常最好遵循提供的样式。

【讨论】:

  • 如果您将两者合并到一个文件中,我绝对同意将代码/html 块分开。如果您知道一旦您点击页面中的某个点,就不会更改任何变量/功能,那么以后调试/编辑内容会容易得多。我对此做的例外是,如果您正在执行迭代 html 输出,例如
  • 来自数组的元素。
  • wordpress 这个但是我觉得太糟糕了不干净
  • 【解决方案2】:

    我认为这将取决于您的团队或您自己决定的约定。它可以并且应该根据您正在处理的文件类型而有所不同。如果您遵循 MVC 模式,那么您的观点应该是后者。如果您正在编写一个类或一些非输出脚本/代码,那么您应该使用前者。

    尽量将输出的显示或格式与提供数据的逻辑分开。例如,假设您需要创建一个运行简单查询并输出一些数据的快速页面。在这种情况下(没有其他现有基础设施或框架),您可以将逻辑放在包含或文件的顶部或底部。示例:

    <?php
      # define some functions here that provide data in a raw format
    ?>
    <html>
    <body>
      <?php foreach($foo = data_function($some_parameter) as $key => $value): ?>
      <p>
        <?=$value;?>
      </p>
      <?php endforeach; ?>
    </body>
    </html>
    

    或者您可以将逻辑和函数定义放在包含文件中或文件底部。

    现在,如果您正在生成某种具有输出的类(它确实不应该),那么您将回显 HTML 或从被调用的方法中返回它。最好返回它,以便实现者可以随时随地输出它。

    【讨论】:

      【解决方案3】:

      正如您所说,语法突出显示是第二种方法的一个重要优点。但是,如果您遵循将逻辑和表示分离的良好实践,您自然会发现包含 HTML 的文件几乎完全是 HTML,然后自然而然地再次导致您的第二种方法。这是 MVC 框架等的标准。您将拥有一堆全是 PHP 的文件,用于处理逻辑,然后当这些文件完成后,它们将包含一个演示文件,该文件主要是 HTML 和少量的 PHP。

      【讨论】:

      • 这个。大多数(全部?)编辑器不会语法高亮 PHP 字符串中的 HTML。
      • 一些在以&lt;&lt;&lt;HTML ... HTML; (TextMate) 开头的“heredoc”块中时会这样做
      • 这个问题,字符串内部没有突出显示,实际上可能是我最大的问题。
      • 然而,heredoc 语法消除了缩进,所以这是一个禁忌。
      【解决方案4】:

      简单:

      更多 PHP - 在 PHP 中关闭 HTML。当你在 PHP 中生成 HTML 代码时,当你在做一个类之类的事情时,最好在 echo 中制作。

      更少的 PHP - 在 HTML 中关闭 PHP。这就像只是将变量放入 HTML 内容的字段中,例如表单......等等。

      【讨论】:

        【解决方案5】:

        最好的方法是使用模板系统或至少某种 HTML 框架将 HTML 与 PHP 分开,例如:

        <main>
            <header/>
            <top-nav/>
            <left-col>
                <body />
            </left-col>
            <right-col />
            <footer/>
        </main>
        

        每个节点代表一个模板文件,例如main.php、hrader.php 等。比您必须将 PHP 代码与模板分离为类似 functions.php 之类的东西,并精细地使用您的第二种方法来处理模板文件并保持函数清洁“回声”和 HTML。

        【讨论】:

        • 我用这种方式,我的项目是最好的
        【解决方案6】:

        如果可以,请改用模板引擎。

        虽然一开始混合 HTML 和 PHP 会稍微容易一些,但将它们分开会使以后的维护变得更容易。

        我建议查看TemplateLite,它基于Smarty,但重量更轻。

        【讨论】:

          【解决方案7】:

          我得出一个结论,即在 MVC 框架中使用 views,例如Laravel、Yii、CodeIgniter 是最好的方法,即使您不立即显示 html。

          在视图内部执行准备好的变量的所有回显和循环,不要在那里创建或调用函数,除非格式化现有数据,例如日期为特定格式date('Y-m-d', strtodate(123456789))。它应该只用于创建 HTML,而不是处理它。这就是框架具有控制器的用途。

          如果使用纯 PHP,请创建您自己的视图函数以将 3 个变量传递给 - html 文件、变量数组,以及如果您想将输出作为字符串或直接打印给浏览器。我觉得不需要它,因为使用框架几乎是一种标准。 (我将来可能会通过创建函数来获取视图生成的 HTML 来改进答案) 请参阅下面添加的编辑作为示例。

          框架允许您获取视图的 HTML 而不是显示它。因此,如果您需要生成单独的表格或其他元素,请将变量传递给视图,然后返回 HTML。

          不同的 fremeworks 可能使用不同类型的模板语言,例如刀刃。它们有助于格式化数据,并从本质上使模板更易于使用。也没有必要使用它们来显示数据,或者如果框架强制使用它,只需在发布变量之前进行必要的处理,然后使用 {{ yourVariable }}{{ yourVariable.someProperty }} 之类的东西“打印”它

          编辑:这是一个普通的 PHP(不是 PHP 框架)-simple-php-view 存储库作为示例视图库,它允许使用变量生成 HTML。可能适用于学校/大学项目等可能不允许使用框架的项目。

          存储库允许随时通过调用函数并将所需变量传递给它来生成 HTML,类似于框架。单独生成的 HTML 然后可以由另一个视图组合。

          【讨论】:

            【解决方案8】:

            这取决于上下文。如果您要输出大量带有属性的 HTML,您会厌倦在 PHP 字符串中转义引号。但是,也不需要使用?&gt;&lt;p&gt;&lt;? 代替echo "&lt;p&gt;";。这真的只是个人品味的问题。

            【讨论】:

              【解决方案9】:

              第二种方法是我常用的。这也是我的默认方法。让 php 在 html 中工作而不是回显 html 代码只是很方便。但是我不得不修改 httpd.conf 文件,因为我的服务器刚刚注释掉了 php 代码。

              【讨论】:

                猜你喜欢
                相关资源
                最近更新 更多
                热门标签