学习PHP5的面向对象的编程方法,原来的这段面向过程的代码该如何修改?

tjyihui 2005-01-08 09:32:54
原来在PHP4时代,一直采用面向过程的编程方法,这里举一个简单的例子,显示出员工信息。编码时采用了PHPLib的mysql操作类以及模板

类,因此程序页面文件分为show_staffinfo.php和show_staffinfo.html。代码如下
--------------show_staffinfo.php-----------------------
<?php
//引入phplib模板
include "../include/template.inc.php";
//数据库操作类
include "../include/db_mysql.inc.php";

$db=new DB_sql;
$db->connect();
$db->query("select id,name,telephone,address from staff");

//声明模板类。其中的参数是相对根目录的放模板文件的路径。
$t=new Template("template");
$t->set_file("show_staffinfo","show_staffinfo.html");
$t->set_block("show_staffinfo","row","rows");

while($db->next_record()) {
$t->set_var("name",$db->Record[name]);
$t->set_var("name",$db->Record[telephone]);
$t->set_var("name",$db->Record[address]);
$t->parse("rows","row",true);
}

$db->free();

//分析输出模板
$t->pparse("show_community","show_community");
?>

--------------template/show_staffinfo.html-----------------------
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html XMLns="http://www.w3.org/1999/xhtml" >
<head>
<title>显示员工信息页面</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
</head>
<body background="#FFFFFF">
<table border="0" cellpadding="2" cellspacing="1" style="border-collapse: collapse" bordercolor="#111111" width="100%">
<tr>
<td width="20%">员工姓名</td>
<td width="20%">员工电话</td>
<td width="60%">家庭住址</td>
</tr>
<!-- BEGIN row -->
<tr>
<td>{name}</td>
<td>{telephone}</td>
<td>{address}</td>
</tr>
<!-- END row -->
</table>
</body>
</html>
最近本人在学习PHP5的面向对象的编程方法,一直想把原来的代码进行修改,但是因为PHP5不支持多重继承,不能同时继承PHPlib的mysql操作

类和模板类,因此给代码的修改工作造成了困难
以下是我以面向对象的方式修改了半截的代码
<?php
include "../include/template.inc.php";
include "../include/db_mysql.inc.php";

class ShowCommunityDB extends DB_sql {
function Show() {
$this->connect();
$this->query("select id,name,telephone,address from staff");
while($this->next_record()) {
echo $this->Record[name]."-".$this->Record[telephone]."-".$this->Record[address]."<br>";
}
$this->free();
}
}

$db=new ShowCommunityDB();
$db->Show();
?>
从上面的代码可以看到,我只能用echo $this->Record[name]."-".$this->Record[telephone]."-".$this->Record[address]."<br>";的简单

形式把数据显示出来,而不能想以前那样结合模板输出数据。请问大家如果我采用面向对象的编程方法,那么该如何修改我的代码呢?
...全文
190 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
mahaixing 2005-01-13
  • 打赏
  • 举报
回复
我认为不应该从template或者DB_sql中的任何一个派生。
应该抽象出一个page类来处理分页问题,然后根据具体的情况从page类派生不同的分页类。
我所说的不同情况指的是数据取得的方式。
这样,你的分页类就可以适应不同的需求。
pigzjq 2005-01-11
  • 打赏
  • 举报
回复
TO xuzuning(唠叨)
如果再加上user类,article类以及page分页类等
应该如何安排
还望不吝赐教
xuzuning 2005-01-08
  • 打赏
  • 举报
回复
建议你从template派生出工作类,将DB_sql作为属性在类中实例化

也可以修改template.inc.php
令template从DB_sql派生,再从template派生出工作类
tjyihui 2005-01-08
  • 打赏
  • 举报
回复
TO xuzuning(唠叨)
太感谢啦,我已经按照您的第一种建议把代码进行了修改,代码结构果然更精练清晰了不少!

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧