模仿的MVC。看看这样到底好不好。或者提供更好的编程思想。大家讨论讨论吧。
源码如下。业务对outbox表进行了一个查询。并分页。功能基本上完成。一共有5个PHP page。
源码文件分为:
不好意思名字命名跟php不是很规范
dao:outboxdao.php,//访问数据库操作
biz:outboxbiz.php,//业务类
view displaybox.php.//显示数据公共类:
pageBean.php//封装分页的业务
DBConnection.PHP//得到连接数据库的下面是源码。//outboxdao.php
include_once("../../comm/dao/DBConnection.php");
class outboxdao{
/**
 * 得到数组
 */
public function getList($offset,$pageSize){ $dbconndb = new DBConnection();
$conn = $dbconndb->getConnection();
mysql_select_db("kalkun");
mysql_query("set names gb2312");
$sql="select ID, DestinationNumber,TextDecoded ,InsertIntoDB from outbox order by ID asc  limit ".$offset.",".$pageSize;
$ret = mysql_query($sql,$conn);
//echo $sql."<br/>";
while($list=mysql_fetch_array($ret)){
$row[] = $list;
}
mysql_close($conn);
return $row; }
/**
 * 统计总行数
 */
  public function countAllRow(){
   $dbconndb = new DBConnection();
$conn = $dbconndb->getConnection();
mysql_select_db("kalkun");
$sql="select count(1) from outbox ";
$ret=mysql_query($sql);
$row = mysql_fetch_array($ret);
mysql_close($conn);
return $row[0];  }
}
?>
//comm/dao/DBConnection.php
<?php
 class DBConnection{
  public  static  $dbname;
public static $dbaddr="localhost";
public static  $dbName="root";
public  static $dbpassword="sa";
public static  $dbconInstance = null;/**
 * 得到连接
 */
public static function getConnection(){
return mysql_connect(DBConnection::$dbaddr,DBConnection::$dbName,DBConnection::$dbpassword); }
/**
 * 关闭连接
 */
public static function closeCon($link){
mysql_close($link);
}
 }
?>
<?php
//pageBean.php 分页封装类
class pageBean {
   private  $allRow=0;//总行数
   private  $currentPage;//当前页
   private  $pageSize ;//每页显示行数
   private  $totalPage ;//总页数    private $dadalist = array();//存储数据集合
public function setDatalist($dadalist){
$this->dadalist=$dadalist;}
public function getDatalist(){
//print_r($this->datalist);
return $this->dadalist;
}public function setAllRow($allRow){
$this->allRow=$allRow;
}
public function getAllRow(){
return $this->allRow;
}
public function setCurrentPage($currentPage)
{
$this->currentPage=$currentPage;
}
public function getCurrentPage(){
return $this->currentPage;
}
public function setPageSize($pagesize){
$this->pageSize=$pagesize;
}
public function getPageSize(){
return $this->pageSize;
}public function setTotalPage($totalPage){
$this->totalPage=$totalPage;
}
public function getTotalPage(){
return $this->totalPage;
}
/**
 * 统计总页数
 */
static function  countPage($pagesize, $countrow) {
//$pageCount= countrow()%$pagesize==0?(countrow()/$pagesize):((int)(countrow()/$pagesize)+1);
if ($countrow % $pagesize == 0) {
$pageCount = $countrow / $pagesize;
} else {
$pageCount = (int) ($countrow / $pagesize) + 1; }
return $pageCount;
}
/**
 * 计算当前指开始记录数
 */
static function countOffset($pagesize, $currentPage) {
return $pagesize * ($currentPage -1);
}
}
?>
//outboxbiz.php
<?php
/*
 * Created on 2010-7-21
 *
 * To change the template for this generated file go to
 * Window - Preferences - PHPeclipse - PHP - Code Templates
 */
include_once("outboxdao.php");
include_once("../pageBean.php");
 class outboxbiz{
  public function  getoutboxPageBean($currentPage,$pageSize){
$outboxdao = new outboxdao();
$dbconn = new DBConnection();
$offset = pageBean::countOffset($pageSize,$currentPage);//计算开始记录数
$allRow = $outboxdao->countAllRow();//得到总行数
$row = $outboxdao->getList($offset,$pageSize);//指定到数据
pageBean::countPage($pageSize,$allRow);//总页数
//print_r($row);
$pageBean = new pageBean();
$pageBean->setAllRow($allRow);
$pageBean->setPageSize($pageSize);
$pageBean->setCurrentPage($currentPage);
$pageBean->setDatalist($row);
$pageBean->setTotalPage(pageBean::countPage($pageSize,$allRow));
$datalist=$pageBean->getDatalist();
return $pageBean;  }
 }
?>
//displayoutbox.php
<html>
<head>
<meta http-equiv="Content-Language" content="en" />
<meta name="GENERATOR" content="PHPEclipse 1.0" />
<meta http-equiv="Content-Type" content="text/html; charset=gbk" />
<title>title</title>
</head>
<body bgcolor="#FFFFFF" text="#000000" link="#FF9966" vlink="#FF9966" alink="#FFCC99">
<TABLE  id=oTableHead border=1>
<TR>
<td class=Ibx_td_From>
ID
</td>
<td class=Ibx_td_From>
收信号码
</td>
<td class=Ibx_td_Subject>
主题
</td>
<td class=Ibx_td_Date>
日期
</td>
</TR>
<?php
include_once("outboxbiz.php");
include_once("../pageBean.php");
$outboxbiz=new outboxbiz();
$pageSize=10;
$page=$_GET["p"];
echo $page;
$currentPage=isset($page)?intval($page):1; $pageBean = $outboxbiz->getoutboxPageBean($currentPage,$pageSize);
$currentPage=$pageBean->getCurrentPage();
$pageCount=$pageBean->getTotalPage();
//$row=$pageBean->datalist;//此处不明:pageBean 类中的定义私用变量。
//$row = array();
$row = $pageBean->getDatalist();//此处变量row得不到值。
foreach($row as $val){
echo "<tr><td>".$val["ID"]."</td><td>".$val["DestinationNumber"]."</td><td>".substr($val["TextDecoded"],0,10)."</td><td>".$val["InsertIntoDB"]."</td></tr>";
}?> </table>
<table>
<tr>
<td>
<?php $stringPage;
if($currentPage==1){
$stringPage.="首页  上页";
}else{
$stringPage.="<a href=?p=1>第一页</a>|<a href=?p=".($currentPage-1).">上一页</a>|";
}if($currentPage==$pageCount || $pageCount==0){
$stringPage.="末页  下页";
}else
{
$stringPage.="<a href=?p=".$pageCount.">末页</a>|<a href=?p=".($currentPage+1).">下一页</a>|";
}
echo "<center>".$stringPage."</center>";?> </td>
</tr>
</table>
</body>
</html>数据库表结构
CREATE TABLE `outbox` (
  `ID` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `UpdatedInDB` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `InsertIntoDB` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `SendingDateTime` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `Text` text,
  `DestinationNumber` varchar(20) NOT NULL DEFAULT '',
  `Coding` enum('Default_No_Compression','Unicode_No_Compression','8bit','Default_Compression','Unicode_Compression') DEFAULT '8bit',
  `UDH` text,
  `Class` int(11) DEFAULT '-1',
  `TextDecoded` varchar(350) NOT NULL DEFAULT '',
  `MultiPart` enum('false','true') DEFAULT 'false',
  `RelativeValidity` int(11) DEFAULT '-1',
  `SenderID` text,
  `SendingTimeOut` timestamp NULL DEFAULT '0000-00-00 00:00:00',
  `DeliveryReport` enum('default','yes','no') DEFAULT 'default',
  `Idfolder` int(11) DEFAULT '2',
  `CreatorID` text,
  PRIMARY KEY (`ID`),
  UNIQUE KEY `ID` (`ID`)
) ENGINE=MyISAM AUTO_INCREMENT=223 DEFAULT CHARSET=utf8;

解决方案 »

  1.   

    应该让 $dbconndb = new DBConnection();全局整个页面一个数据库类实例化就够了
      

  2.   

    mvc  结构很清晰
    不过个人认为是复杂化的一个过程
      

  3.   

    我感觉做项目直接写sql写到php页面上然后显示出来。不怎么好。还请各位提供更好的思路。
      

  4.   

    php要追求效率,安全(php更加要注意),而不是外在的,不要被别的框架所束缚,有些人代码写的别人看不懂,自认为很高深,其实这样的代码不值得看
      

  5.   

    php一个很好的地方就在于可面向对象但是不一定非要面向对象才能写程序, 要灵活使用,不要弄成Java那样笨拙.直接写sql是最容易挑错和控制输出的,不要排斥,sql语句能直接看到,能直接修改是很方便的,特别是复杂的SQL,难以封装.如果具体的表名字段名,出现在类里,那这个类没什么复用性了.如果是常用的不是为了复用的类, 可以设置几个内置的default模式,就不用写一大排set在实例里,可以直接调用内置默认设置.而且要MVC的话,别在html里输出style,只有id和class即可. 
      

  6.   

    可以设计好命名规范,然后通过统一的入口顺序调用。
    比如 访问index.php?box 加载文件
    include  key($_GET) . 'dao.php'
    include  key($_GET) . 'biz.php'
    include  'display'. key($_GET) . 'php'另外你的view里业务代码太多了,需要的变量应该在biz里定义赋值。view里只作填空。
      

  7.   

    个人觉得一般情况就不用了吧,要是一味的追求mvc框架而使得页面变得很繁琐,那么为什么不用其他语言呢?你在php中把mvc框架弄的再好,能有java的好吗?
    本人水平较低,以上纯属个人想法,不一定准确。
      

  8.   

    一件很几句代码搞定的事 非要弄一大篇才舒服 这就是Java带给我们的弊病
      

  9.   

    7楼朋友说的不错,php的smarty框架可以进行模板替换。这样静态页面就看不到php代码了。也没有业务逻辑。
      

  10.   

    mvc还行,不过一些主要的类都应用使用单例模式。
      

  11.   

    应该是大型复杂的项目做成MVC可能会好些吧,如果是中小型的项目觉得没有这样的必要
      

  12.   

    有道理,不过PHP好像做大项目的很少
      

  13.   


    我一直没搞清楚CSDN上是怎么定义大项目小项目的
      

  14.   

    其实总说中小型项目不适合使用框架,不适合MVC,我觉得这是一个误区。如果你真的实际用过框架,并理解了其原理,就会知道其实框架没那么麻烦。把目录,基本的文件建立好后,你需要做的就是往里面填写代码。开发速度会很快,在开发过程中,大体的架子都搭好了,可以让你的逻辑很清晰,哪个文件用来做什么,这样你不会在写的过程中偏离最初的设计思想,并且它所带来的日后易维护性,远远大于它所带来的麻烦。
      

  15.   

    不过要有一定基础才能适合用框架,最好自己模仿,然后设计。框架确实开发效率高。但是不熟悉或者用的不好。那就事半功倍了,70%-80%调试异常错误。其它时间才是真正的编码。而MVC这种设计模式也比较人性化,主要分工,维护给来带来的便利。大家继续讨论。