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

使用PHP和HTML的最佳实践是什么?,php,html,formatting,Php,Html,Formatting,我设计网站已经有一段时间了,但有一件事我在使用PHP和HTML时从来都不太确定。用PHP和echoHTML编写整个文档是否更好 <?php doSomething(); echo "<div id=\"some_div\">Content</div>"; ?> 或者使用类似的HTML文件,只需在PHP中添加: <html> <body> <?php doSomething(); ?> <div i

我设计网站已经有一段时间了,但有一件事我在使用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中的HTML。当您在PHP中生成HTML代码时,当您执行类似于类的操作时,最好在echo中生成


减少PHP—在HTML中关闭PHP。这就像是将变量放入HTML的字段中一样,比如表单。。。诸如此类。

如果可以,请使用模板引擎

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


我建议您检查一下它的基础,但重量要轻一点。

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

这取决于上下文。如果您要输出大量带有属性的HTML,那么您会厌倦在PHP字符串中转义引号。但是,没有必要使用
?>关于这一点有不同的意见。我认为有两个好办法:

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

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

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

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

我认为这取决于您所在团队或您自己决定的惯例。它可以而且应该根据您使用的文件类型而有所不同。如果您遵循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>


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


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

最好的方法是使用模板系统或至少某种HTML框架(如:

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


每个节点代表一个模板文件,例如main.php、hrader.php等。然后,您必须将PHP代码与模板分离为类似functions.PHP的内容,并巧妙地使用第二种方法处理模板文件,并保持函数没有“echos”和HTML。

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

我得出结论,在MVC框架中使用视图,例如Laravel、Yii、CodeIgniter是最好的方法,即使您没有直接显示html

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

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

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

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

编辑:这里有一个简单的PHP(不是框架PHP)存储库,作为一个示例视图库,允许使用变量生成HTML。可适用于学校/大学专业