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

时间:2010-11-10 19:03:42

标签: php html formatting

我一直在设计网站已有一段时间了,但有一件事我在使用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中的颜色等。

9 个答案:

答案 0 :(得分:23)

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

  • 使用像Smarty这样的模板引擎来完全分离代码和演示文稿。

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

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

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

答案 1 :(得分:10)

我认为这取决于你的团队或你自己的决定。并且它可以 根据您正在使用的文件类型而变化。如果您遵循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或从被调用的方法返回它。最好将它返回,以便无论何时实施者都愿意输出它。

答案 2 :(得分:3)

如你所说,语法高亮是第二种方法的一个重要好处。但是,如果您遵循逻辑和表示分离的良好实践,您自然会发现包含HTML的文件几乎完全是HTML,这自然会再次导致您的第二种方法。这是MVC框架等的标准。你将拥有一堆完全是PHP的文件,做逻辑,然后当它们完成时,它们将包含一个演示文件文件,其中大多数是带有PHP的HTML文件。

答案 3 :(得分:2)

简单:

更多PHP - 在PHP中关闭HTML。当您在PHP中生成HTML代码时,当您执行类似于类的操作时,最好将其设置为echo。

少PHP - 用HTML关闭PHP。这就像将vars放入HTML内容的领域,比如表单......等等。

答案 4 :(得分:2)

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

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

我建议您查看基于TemplateLiteSmarty,但重量要轻一点。

答案 5 :(得分:2)

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

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

每个节点代表一个模板文件,例如main.php,hrader.php等。你需要将PHP代码与模板分开,就像使用functions.php这样的东西,并且很好地使用你的第二种模板文件方法,并保持函数清理“echos”和HTML。

答案 6 :(得分:1)

我得出的结论是,在MVC框架中使用视图即使您没有立即显示html,Laravel,Yii和CodeIgniter也是最好的方法。

在视图中进行准备变量的所有回显和循环操作,除非在格式化现有数据(例如日期以特定格式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。然后可以将单独生成的HTML与另一个视图组合。

答案 7 :(得分:0)

这取决于具体情况。如果您输出大量带有属性的HTML,那么您将厌倦了转义PHP字符串中的引号。但是,也无需使用?><p><?代替echo "<p>";。这真的只是个人品味的问题。

答案 8 :(得分:0)

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