PHP编程
Completion requirements
为什么使用模板 (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>
你很快会发现自己会写这种类型的脚本。这个脚本的问题显而易见:
- 这个 PHP 页面实际上包含了两部分,一部分是错误信息,另一部分是正常的显示内容。这样做会导致混乱。
- 即使是正常显示的部分,PHP 脚本也做了两件事:准备数据和格式化数据(例如:为每行添加交替颜色)。
- 看看 PHP 和 HTML 代码是多么的交织在一起。良好的缩进几乎变得不可能,这使得代码很难阅读。
- 假如你的老板现在要求不使用表格,而是改为列表,你就需要修改 PHP 代码。
- 如果老板需要一个更复杂的错误页面,可能需要至少 300 行 HTML,你还能分清楚第一页和第二页在哪里分隔吗?
- 如果你的设计师希望对页面进行美学上的修改,可能还需要教他们 PHP。
- 问题还在继续。
这就是为什么模板技术(templating)是非常有用的,尤其是在需要分离内容和表示层的时候。通过模板,HTML 和 PHP 代码能够更加解耦,使得代码更加清晰、易于维护。
参考:
PHP 编程 / Smarty
Last modified: Friday, 10 January 2025, 1:50 AM