将PHP代码与HTML输出分开

时间:2010-12-19 10:47:49

标签: php html

我经常听到人们建议(我自己也做了几次)将事情分开:PHP代码,HTML,外部CSS,外部JS等等。

除了明显的可读性和维护优势之外,还有其他强大的优势(例如在服务器负载或页面处理时间方面)吗?

作为一个简单的例子,我们想要实现一个包含我们从数据库中读取的产品的表。

我们想要的输出类似于

<div class="description">This table lists all our products</div>
<table class="products">
   <tr>
     <th>Name</th>
     <th>Available</th>
     <th>Price</th>
   </tr>
   <tr>
     <td>Prod 1</td>
     <td>Yes</td>
     <td>$100</td>
   </tr>
  ...
  ...
  </table>
  <div class="info">Some generic info on the products here</div>

所以这里我们有一些静态输出(2 div元素和表头)和一些动态输出(实际的表内容)。

我们可以将所有静态内容从PHP标记中删除,并尝试仅在需要的地方保留PHP

 <div class="description">This table lists all our products</div>
 <table class="products">         
 <tr>
   <th>Name</th>
   <th>Available</th>
   <th>Price</th>
 </tr>
 <?
 for ($p=0; $p<count($products); $p++)
      {
      echo '<tr>';
      echo '<td>'.$products[$p]["name"].'</td>';
      echo '<td>'.$products[$p]["availability"].'</td>';
      echo '<td>'.$products[$p]["price"].'</td>';
      echo '</tr>';
      }
 ?>
 </table>
 <div>.....</div>

另一方面,我们可以在PHP中嵌入所有内容

 <?
 echo '<div class="description">This table lists all our products</div>';
 echo '<table class="products"><tr><th>Name</th>'.
      '<th>Available</th><th>Price</th></tr>';

 for ($p=0; $p<count($products); $p++)
      {
      echo '<tr>';
      echo '<td>'.$products[$p]["name"].'</td>';
      echo '<td>'.$products[$p]["availability"].'</td>';
      echo '<td>'.$products[$p]["price"].'</td>';
      echo '</tr>';
      }

 echo '</table>';
 echo '<div>.....</div>';

选择其中一种的原因是什么?

4 个答案:

答案 0 :(得分:4)

alternative syntax for control structures对我来说似乎更具可读性:

<div class="description">This table lists all our products</div>
<table class="products">         
    <tr>
        <th>Name</th>
        <th>Available</th>
        <th>Price</th>
    </tr>
<?php foreach($products as $p): ?>
    <tr>
        <td><?php echo $p["name"]; ?></td>
        <td><?php echo $p["availability"]; ?></td>
        <td><?php echo $p["price"]; ?></td>
    </tr>
<?php endforeach; ?>
</table>
<div class="info"><?php echo $info; ?></div>

答案 1 :(得分:1)

如果它只是一段代码供你玩,那根本不重要。

但是如果一个应用程序变得越来越复杂(并且更多的人在其中工作),通常会将视图层(此处为:HTML)与代码层(此处:PHP)分开至关重要。 ) - 所以你可以指派设计师玩输出和编码器来玩它背后的功能。

这不是一个只有php的主题,这是非常一般的。像MVC这样的建筑模型基于类似的理论。

答案 2 :(得分:1)

我认为这是一个非常紧凑的字符串<?= $var ?>

答案 3 :(得分:0)

我不建议使用php的短sytax。有时将代码从一个服务器移动到另一个服务器可能会有问题。

您需要这样做的原因是时间。好的代码很容易支持和升级。在某些情况下,它也是性能问题,但不是在你的情况下。

您案例中的理想示例是: 你必须要文件 的index.php products.php

文件products.php包含

<?php
...
foreach($products as $product)
{
    $productHTML[] = '<tr><td>' . $product["name"] . '</td></tr>';
}

$productHTML = implode("", productHTML);
?>

index.php:
<html>
...
<?php echo $productsHTML;?>
...
</html>

当然,更多的普通开发人员使用更多的硬结构,我们使用函数,类,模板等等。但这种方式对于小项目来说已经足够了。