不错的一篇面向对象的PHP开发模式(简写版)_PHP教程
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了不错的一篇面向对象的PHP开发模式(简写版)_PHP教程,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含15585字,纯文字阅读大概需要23分钟。
内容图文
![不错的一篇面向对象的PHP开发模式(简写版)_PHP教程](/upload/InfoBanner/zyjiaocheng/167/ee3cb5a563c343f4a7fb382bfe2634d7.jpg)
======================================
面向对象的PHP开发模式(待完善中。。。)
======================================
一、环境
服务器:Linux (Apache 2.x, MySQL4.1.x, PHP4, Perl, SHELL, CVS, Sambar)
客户端:Windows (Ie6, UltraEdit, 其它辅助工具)
测试机:windows98/2K/xp/Linux (Ie5, Ie6, mozilla, firefox)
二、网页、程序、数据库的三层
所谓的网页并不是一般的静态网页,这里的网页是根据项目分析的具体情况进行拆分
后用html做的模板;这里的数据库包括数据库和与其它部分的接口程序,通常程序和数据库
程序可能会混合在一个文件里,但应该用函数的方式把它们尽量分开,其它程序如果要用数
据库直接调用这些函数即可,不能直接接触SQL语句。
三、项目分析--数据分析
一个项目在得到需求分析后,实际开发前第一步应该做的就是数据分析。数据分析就是
把项目过程中要用到的各式各样的数据堆在一块,根据它们的特点进行分类再分别组织,当
然它们之间还可能存在着各式各样的关联关系。做好这一步就使项目分析工作得到了一个良
好的开端,为下面的项目结构分析及数据处理的流程分析也提供了极大的方便。
四、项目分析--数据抽象
由数据分析后我们的脑子中应该能出现一些大致的数据模型及一些基本数据小模型组合
而成的大模型,一般情况下,我们把一些需要变化的数据建立数据库来进行维护,不需要变
化的数据做成一些常量,并针对这些数据类型抽象出相关的类,并建立进行数据库操作的相
关接口(函数形式,即方法),数据与数据的相关联的操作也可以抽象出一些基本的方法,
我们只需要在程序设计中进行调用即可。
五、项目分析--界面分析
我们分析好了数据,目的是组合出一个或者几个产品,而既然要做产品就要给别人看。
所以我们还要进行界面设计,当各种界面尽量考虑全面后,就将设计的界面制作成模板,并
写出相应的处理接口程序(所以,在程序眼里,界面也是一种数据),在写程序时进行使用。
六、项目分析--流程设计
网站式程序非常简单,按照流程调用我们设计好的各种数据即可。
七、案例分析
用户系统,现在我们分析一个最简单的例子,一个用户系统。
1. 数据分析,我们分析一个最简单的用户系统,所以这里只有两个数据,那就是用户名
和密码,继续分析还会想到我们应该给每条记录加一个编号(id),现在有了三个数据,实在没
有再可以添加的了。
2. 数据抽象,只有三个数据的数据模型,想到它可能出现的操作方法,我们做如下安排,
数据库接口(savetodb(), getfromdb(), delete()),分别为数据入库及出库还有删除;更改密
码(password())。另外考虑到对用户系统的管理及查看,所以会有一个集合类型的数据(list)。
3. 界面分析,登陆,验证成功,验证出错,修改密码,修改密码成功,修改密码出错,用
户注册,注册成功,注册出错;管理--用户列表,管理--用户信息查看,管理--修改用户
密码,管理--删除用户。
4. 示例代码
PHP 代码:
代码如下:
include_once "include.php";
/*
** 用途:用户系统数据抽象
** 作者:岳信明
** 时间:2005-8-30 10:05
*/
class User {
var $id = 0;
var $Name = "";
var $Password = "";
var $db = "";
var $tpl = "";
/*
** 函数功能:构造函数,指定类使用的数据库连接
** 参数说明:$tpl,显示模板处事句柄;$userdb,数据库连接
** 返 回 值:无
** 作 者:岳信明
** 创建时间:2005-8-30 10:37
*/
function User($vtpl = "", $userdb = "") {
if ($vtpl == "") {
global $tpl; // 外部定义数据库连接
$this->tpl =& $tpl;
} else {
$this->tpl = $vtpl;
}
if ($userdb == "") {
global $db; // 外部定义数据库连接
$this->db =& $db;
} else {
$this->db = $userdb;
}
}
/*
** 函数功能:将数据存入数据库
** 参数说明:无参数
** 返 回 值:true/false,成功/失败
** 作 者:岳信明
** 创建时间:2005-8-30 10:24
*/
function savetodb() {
if ($this->Name == "") {
return false;
}
if ($this->id) {
$strSQL = sprintf("UPDATE user SET Name='%s', Password='%s' "
. "WHERE id='%s'",
$this->Name,
$this->Password,
$this->id
);
} else {
$strSQL = sprintf("INSERT user (Name, Password) "
. "VALUES ('%s', '%s')",
$this->Name,
$this->Password
);
}
if ($this->db->query($strSQL)) {
return true;
} else {
return false;
}
}
/*
** 函数功能:从数据库中获取记录
** 参数说明:$id,记录编号
** 返 回 值:true/false,成功/失败
** 作 者:岳信明
** 创建时间:2005-8-30 10:32
*/
function getfromdb($id = 0) {
if ($id) {
$strSQL = sprintf("SELECT * FROM user WHERE id='%s'", $id);
} else if ($this->id) {
$strSQL = sprintf("SELECT * FROM user WHERE id='%s'",
$this->id
);
} else if ($this->Name != "") {
$strSQL = sprintf("SELECT * FROM user WHERE Name='%s'",
$this->Name
);
} else {
return false;
}
$this->db->query($strSQL);
if ($this->db->next_record()) {
$this->id = $this->db->f("id");
$this->Name = $this->db->f("Name");
$this->Password = $this->db->f("Password");
return true;
} else {
return false;
}
}
/*
** 函数功能:从数据库中删除记录
** 参数说明:$id,记录编号
** 返 回 值:true/false,成功/失败
** 作 者:岳信明
** 创建时间:2005-8-30 10:47
*/
function delete($id = 0) {
if (is_array($id)) { // 同时删除多条记录
foreach($id as $i) {
$strSQL = sprintf("DELETE FROM user WHERE id='%s'", $i);
$this->db->query($strSQL);
}
return true;
} else if ($id) {
$strSQL = sprintf("DELETE FROM user WHERE id='%s'", $id);
} else if ($this->id) {
$strSQL = sprintf("DELETE FROM user WHERE id='%s'", $this->id);
} else {
return false;
}
$this->db->query($strSQL);
return true;
}
/*
** 函数功能:显示登陆界面
** 参数说明:$placeholder,显示位置
** 返 回 值:无
** 作 者:岳信明
** 创建时间:2005-8-30 11:00
*/
function showLogin($placeholder) {
$this->tpl->addBlockfile($placeholder, "user_showLogin",
"tpl.user_showLogin.html"
);
$this->tpl->setCurrentBlock("user_showLogin");
$this->tpl->setVariable(array("user_Logintitle" => "用户登陆",
"strUsername" => "用户名",
"strPassword" => "密 码"
)
);
$this->tpl->parseCurrentBlock("user_showLogin");
}
/*
** 函数功能:处理登陆信息
** 参数说明:$placeholder,显示位置
** 返 回 值:true/false,成功/失败
** 作 者:岳信明
** 创建时间:2005-8-30 11:12
*/
function getLogin($placeholder = "") {
if (isset($_POST["login"])) {
if ($_POST["username"] == "") {
if ($placeholder != "") {
$this->tpl->setVarable($placeholder, "用户名不能为空!");
}
return false;
}
$this->Name = $_POST["username"];
$this->getfromdb();
if ($this->Password() == $_POST["password"]) {
return true;
}
} else {
if ($placeholder != "") {
$this->tpl->setVarable($placeholder, "登陆失败!");
}
return false;
}
}
/*
** 函数功能:显示注册界面
** 参数说明:$placeholder,显示位置
** 返 回 值:无
** 作 者:岳信明
** 创建时间:2005-8-30 13:33
*/
function showRegister($placeholder) {
$this->tpl->addBlockfile($placeholder, "user_showRegister",
"tpl.user_showRegister.html"
);
$this->setCurrentBlock("user_shoRegister");
// 在这里完成处理模板的代码
...
$this->parseCurrentBlock("user_shoRegister");
}
/*
** 函数功能:处理注册信息
** 参数说明:$placeholder,显示位置
** 返 回 值:true/false,注册成功/注册失败
** 作 者:岳信明
** 创建时间:2005-8-30 15:49
*/
function getRegister($placeholder = "") {
if (isset($_POST["register")) {
if ($_POST["username"] == "") { // 用户名合法性检查,可改成其它检查方式
if ($placeholder != "") { // 错误提示
$this->tpl->setVariable($placeholder, "用户名不合法!");
}
return false;
}
if ($_POST["password"] != $_POST["repassword"]) { // 密码合法性检查
if ($placeholder != "") { // 错误提示
$this->tpl->setVariable($placeholder, "两次输入密码不一致!");
}
return false;
}
$strSQL = sprintf("SELECT COUNT(*) FROM user "
. "WHERE Name='%s'",
$this->Name
);
$this->db->query($strSQL);
$this->db->next_record();
if ($this->db->f("COUNT(*)") > 0) {
return false;
} else {
$strSQL = sprintf("INSERT INTO user (Name, Password) "
. "VALUES('%s', '%s')",
$this->Name,
$this->Password
);
$this->db->query($strSQL);
return true;
}
} else {
return false;
}
}
} // 类User定义结束
/*
** 用途:用户系统数据列表抽象
** 作者:岳信明
** 时间:2005-8-30 17:21
*/
class UserList {
var $page = 0;
var $pages = 0;
var $pagesize = 9;
var $recordsum = 0;
var $Users = array();
var $c;
var $db = "";
var $tpl = "";
/*
** 函数功能:构造函数,新建一个类时对一些变量进行初始化
** 参数说明:无参数
** 返 回 值:无
** 作 者:岳信明
** 创建时间:2005-8-30 15:49
*/
function UserList($page = 1, $pagesize = 10,
$c, $vtpl = "", $vdb = "") {
$this->page = $page;
$this->pagesize = $pagesize;
$this->condition = $condition;
if ($vdb != "") {
$this->db = $vdb;
} else {
global $db;
$this->db = $db;
}
if ($vtpl != "") {
$this->tpl = $vtpl;
} else {
$this->tpl = $tpl;
}
$strSQL = sprintf("SELECT COUNT(*) FROM user WHERE '%s'",
$this->condition
);
$this->db->query($strSQL);
$this->db->next_record();
$this->recordsum = $this->db->f("COUNT(*)");
$this->pages = ceil($this->recordsum / $this->pagesize);
$strSQL = sprintf("SELECT * FROM user WHERE '%s' LIMIT '%s', '%s'",
$this->condition,
$this->page * $this->pagesize,
$this->pagesize + 1
);
$this->db->query($strSQL);
for ($i = 0; $this->db->next_record(); $i ++) {
$this->Users[$i] = new User($this->tpl, $this->db);
$this->Users[$i]->id = $this->db->f("id");
$this->Users[$i]->Name = $this->db->f("Name");
$this->Users[$i]->Password = $this->db->f("Password");
}
}
/*
** 函数功能:显示列表
** 参数说明:$placeholder,显示位置
** 返 回 值:无
** 作 者:岳信明
** 创建时间:2005-8-31 9:16
*/
function showUserList($placeholder) {
$this->tpl->addBlockfile($placeholder, "showUserList", "tpl.showUserList.html");
$this->tpl->setCurrentBlock("showUserList");
//在这里添加相应的处理代码
$this->tpl->setVariable("strTitle", "用户列表");
$strTitles = array("用户名", "操作");
$RecordOperations = array("重设密码" => "operate=passwd&id=",
"删除" => "operate=delete&id="
);
// 显示表头
foreach ($strTitles as $title) {
$this->tpl->setCurrentBlock("showRecordsTitle");
$this->tpl->setVariable("strHead", $title);
$this->tpl->parseCurrentBlock("showRecordsTitle");
}
// 显示记录及相关操作
if (is_array($this->Users)) { // 有记录
foreach ($this->Users as $user) {
$this->tpl->setCurrentBlock("showRecords");
$this->tpl->setCurrentBlock("showCell");
$this->tpl->setVariable("strCell", $user);
$this->tpl->parseCurrentBlock("showCell");
$this->tpl->setCurrentBlock("showCell");
foreach ($RecordOperations as $operation => $linkOperation) {
$this->tpl->setCurrentBlock("showOperations");
$this->tpl->setVariable("strOperation", $operation);
$this->tpl->setVariable("strLink", $_SERVER["REQUEST_URI"] . $linkOperation . $user->id);
$this->tpl->parseCurrentBlock("showOperations");
}
$this->tpl->parseCurrentBlock("showCell");
$this->tpl->parseCurrentBlock("showRecords");
}
} else { // 无记录
$this->tpl->setCurrentBlock("showRecords");
$this->tpl->setCurrentBlock("showCell");
$this->tpl->setVariable("strCell", "无记录");
$this->tpl->parseCurrentBlock("showCell");
$this->tpl->setCurrentBlock("showCell");
$this->tpl->setVariable("strCell", " ");
$this->tpl->parseCurrentBlock("showCell");
$this->tpl->parseCurrentBlock("showRecords");
}
$this->tpl->setCurrentBlock("showPageInfo");
$this->tpl->setVariable(array("intColspan" => "2",
"intRecordSum" => $this->recordsum,
"intPage" => $this->page,
"intPages" => $this->pages
)
);
$this->tpl->parseCurrentBlock("showPageInfo");
$this->tpl->parseCurrentBlock("showUserList");
}
}
?>
HTML 代码:
[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
http://www.bkjia.com/PHPjc/317998.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/317998.htmlTechArticle我看到有人在批判PHP,什么这地方不好用,那地方不好用的。其实严格地说起来,没有一门语言好用,也没有一门语言有一个严格的标准,...
内容总结
以上是互联网集市为您收集整理的不错的一篇面向对象的PHP开发模式(简写版)_PHP教程全部内容,希望文章能够帮你解决不错的一篇面向对象的PHP开发模式(简写版)_PHP教程所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。