使用PHP和HTML时的最佳实践是什么?

24

我已经设计网站一段时间了,但在使用PHP和HTML时有一件事情我一直不太确定。是在PHP中编写整个文档并使用echo输出HTML,还是将HTML与PHP代码混合在一起:

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

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

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

在页面中使用大量PHP时,echo HTML似乎更加整洁,但这样做会失去HTML的所有格式,例如IDE中的颜色。


我不是PHP的高手,但最好的方法是将你的PHP代码分散在不同的文件中,对我来说更清晰明了。 - simon
9个回答

29

对此有不同的看法。我认为有两种好方法:

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

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

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

    大多数完整的应用程序框架都有自己的处理方式;在这种情况下,最好遵循提供的样式。


1
我完全同意将代码/HTML块分开,如果你将两者合并到一个文件中。如果你知道一旦到达页面的某个特定点后没有变量/功能会改变,那么这将使调试/编辑更容易。我对此的例外是,如果你正在进行迭代HTML输出,例如从数组中的<li>元素。 - nmjk
WordPress这个东西,但我认为它很糟糕,不够干净。 - simon

12

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

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

<?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>

或者你可以将逻辑和函数定义放在一个include文件中或者放在文件底部。

如果你正在编写一个具有输出功能的类(实际上不应该这么做),那么你可以通过echo HTML或从被调用方法中返回HTML来输出它。最好是返回HTML以便于实现者能够自如地输出和修改。


4

正如你所说,语法高亮是第二种方法的重要优点。但是,如果你遵循逻辑和表现分离的良好实践,你会自然而然地发现包含HTML的文件几乎完全是HTML,这将自然地导致你使用第二种方法。这是MVC框架等的标准。你将拥有一堆PHP文件,执行逻辑,当完成时它们将包含一个主要是HTML的表现文件,并带有一些PHP代码。


这个。大多数(全部?)编辑器不会在PHP字符串中语法高亮显示HTML。 - Core Xii
有些人在使用以 <<<HTML ... HTML;(TextMate)开头的 'heredoc' 块时会这样做。 - sholsinger
那个问题,即字符串内部缺乏高亮显示,实际上可能是我对它最大的问题。 - Tesserex
1
然而,长字符串语法会破坏缩进格式,因此应尽量避免使用。 - Core Xii

3
最好的方法是使用模板系统或至少一种HTML骨架来分离HTML和PHP,例如:

最好的做法是使用模板系统或至少一种 HTML 骨架来分离 HTML 和 PHP,例如:

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

每个节点代表一个模板文件,例如main.php、header.php等。然后你需要将PHP代码从模板中分离出来,创建类似于functions.php的文件,并最终使用第二种方法处理模板文件,让函数保持没有“echos”和HTML的干净状态。

我用这种方法对我和我的项目来说最好。 - simon

3

简单易懂:

更多的PHP - 在PHP中关闭HTML。当您在PHP中生成HTML代码时,如果您正在做类似于类的事情,那么最好使用echo来完成。

少些PHP - 在HTML中关闭PHP。这是一些简单的操作,比如将变量放入HTML元素中,例如表单等。


2

如果可以的话,最好使用模板引擎。

虽然一开始混合HTML和PHP可能会稍微容易一些,但将它们分离后,以后维护起来会更加容易。

我建议您查看TemplateLite,它基于Smarty,但比较轻量级。


1
我得出结论,即使您不立即显示HTML,使用MVC框架(如Laravel、Yii、CodeIgniter)中的视图是最佳方法。
在视图中执行所有预先准备好的变量的回显和循环,不要创建或调用函数,除非格式化现有数据(例如将日期格式化为特定格式date('Y-m-d',strtodate(123456789))。它应仅用于创建HTML,而不是处理它。这就是框架控制器的作用。
如果使用纯PHP,请创建自己的视图函数以传递3个变量-HTML文件,变量数组以及是否要将输出作为字符串获取或直接打印到浏览器。我认为没有必要,因为使用框架已经是标准了。请参见下面添加的编辑示例。
框架允许您获取视图的HTML而不是显示它。因此,如果需要生成单独的表格或其他元素,请将变量传递给视图并返回HTML。
不同的框架可能会使用各种类型的模板语言,例如blade。它们有助于格式化数据,并使模板更易于处理。但是,在显示数据时并不一定需要使用它们,或者如果被框架强制使用,则只需在发布变量之前进行所需的处理,然后使用类似于{{ yourVariable }}{{ yourVariable.someProperty }}的方式“打印”它。 编辑:这里有一个简单的PHP视图库simple-php-view,适用于生成HTML的变量。可能适用于学校/大学项目或不允许使用框架的场合。该存储库允许通过调用函数并将所需的变量传递给它来随时生成HTML,类似于框架。然后,另一个视图可以组合分别生成的HTML。

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

0

这取决于上下文。如果您正在使用属性输出大量HTML,则会厌倦在PHP字符串中转义引号。但是,没有必要使用?><p><?而不是echo "<p>";。这只是个人口味的问题。


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