为什么使用模板 (Templating) 

那么,什么是模板呢?对于我们来说,模板是一个类似 HTML 的文档,定义了网页的呈现方式,而 PHP 脚本则提供了内容。内容与展示的分离是任何图形用户界面(GUI)范式的核心。为了理解为什么这种分离是理想的,我们可以考虑以下这个假设的、但很现实的脚本。这个脚本从数据库中检索图书列表,并将其显示为表格,每一行的颜色交替显示;如果列表为空,则显示 "没有找到图书"。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
       "http://www.w3.org/TR/html4/loose.dtd">
<html>
   <head>
      <title>图书列表</title>
   </head>

    <body>

<?php
$books = new Array();
$i = 0;

$database = open_database();
if (is_null($database)) {?>
    <h1>打开数据库时发生错误</h1>
    请联系系统管理员 alice@wonderland.com 并报告问题。
    </body>
    </html>

<?php
    exit();
}

$result = $database->query("SELECT ISBN, title, author FROM book");
while ($row = $result->retrieveAssoc()) {
    $books[] = $row;
}?> 

    <table>
        <?php
        if (count($books) == 0) {
            echo "<tr><td>没有找到图书</td></tr>";
        }
        else {
            foreach ($books as $book) {
                if ($i % 2 == 0) {
                    echo "<tr bgcolor='#EEEEEE'>";
                } else {
                    echo "<tr bgcolor='#FFFFFF'>";
                }
                $i++; ?>
                <td><?php echo $book['ISBN']; ?></td>
                <td><?php echo $book['title']; ?></td>
                <td><?php echo $book['author']; ?></td>
                </tr>
        <?php
            }
        }?>
    </table>
</body>
</html>

你很快会发现自己会写这种类型的脚本。这个脚本的问题显而易见:

  1. 这个 PHP 页面实际上包含了两部分,一部分是错误信息,另一部分是正常的显示内容。这样做会导致混乱。
  2. 即使是正常显示的部分,PHP 脚本也做了两件事:准备数据和格式化数据(例如:为每行添加交替颜色)。
  3. 看看 PHP 和 HTML 代码是多么的交织在一起。良好的缩进几乎变得不可能,这使得代码很难阅读。
  4. 假如你的老板现在要求不使用表格,而是改为列表,你就需要修改 PHP 代码。
  5. 如果老板需要一个更复杂的错误页面,可能需要至少 300 行 HTML,你还能分清楚第一页和第二页在哪里分隔吗?
  6. 如果你的设计师希望对页面进行美学上的修改,可能还需要教他们 PHP。
  7. 问题还在继续。

这就是为什么模板技术(templating)是非常有用的,尤其是在需要分离内容和表示层的时候。通过模板,HTML 和 PHP 代码能够更加解耦,使得代码更加清晰、易于维护。

参考:
PHP 编程 / Smarty

最后修改: 2025年01月10日 星期五 01:50