免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 10177 | 回复: 27
打印 上一主题 下一主题

好东西大家分享(3):php中的MVC模式运用(转载) [复制链接]

论坛徽章:
52
码神
日期:2017-03-28 10:27:10综合交流区版块每日发帖之星
日期:2015-10-11 06:20:00综合交流区版块每日发帖之星
日期:2015-09-28 06:20:00综合交流区版块每日发帖之星
日期:2015-09-22 06:20:00每日论坛发贴之星
日期:2015-09-12 06:20:00综合交流区版块每日发帖之星
日期:2015-09-12 06:20:00综合交流区版块每日发帖之星
日期:2015-09-08 06:20:00综合交流区版块每日发帖之星
日期:2015-09-05 06:20:00综合交流区版块每日发帖之星
日期:2015-09-04 06:20:002015亚冠之德黑兰石油
日期:2015-09-01 10:41:53每日论坛发贴之星
日期:2015-10-11 06:20:00综合交流区版块每日发帖之星
日期:2015-10-12 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-07-27 16:26 |只看该作者 |倒序浏览
php中的MVC模式运用
首先我来举个例子:
一个简单的文章显示系统
简单期间,我们假定这个文章系统是只读的,也就是说这个例子将不涉及文章的发布,现在开始了。
由于只涉及数据库的读取,所以我定义了两个interface

Interface DataOperation
{
    public function select($info);
    public function selectNum($info);
}
上面这interface定义了读取数据的接口,select方法将返回所需要的文章。selectNum方法返回文章的总数,这是分页显示时用到的。$info是一个数组,用来存放查询条件
Interface DataSource
{
    public static function getInstance();
}
这里我们假定我们操作的是数据库,DataSource定义一个接口,所有实现该接口的实例类将得到一个静态对象
Interface Controller
{
    public function pop();
    public function push();
    public function execute();
}
Interface View
{
    public function display();
}
好了,我们来实现.
下面定义一个类来实现DataSource接口,这个类运用了单例模式
class DataBaseSource implements DataSource
{
    public static $instance = null;
    public static function getInstance()
    {
        if(self:instance == null)
        {
            self:instance == new PDO("mysql:host=localhost;dbname=article","root","123456";
        }
        return self:instance;
    }
}
定义一个抽象类来实现DataOperation,我们要共享一个数据库连接,所以我在抽象类中将这个数据库对象初始化,这样,所有的子类都能共享这个对象
abstract class DataBaseOperation implements DataOperation
{
    protected $db = null;
    public function __construct()
    {
        $this->db = DataBaseSource::getInstance();
    }
    public function select($info);
    public function select($info);
}
下面我来写一个业务子类来实现抽象类DataBaseOperation
class Tech extends DataBaseOperation
{
    public function select($info)
    {
        //在这里实现你的代码
    }
    public function selectNum($info)
    {
        //在这里实现你的代码
    }
}
业务逻辑层我们实现了,下面是控制层
class ViewController implements Controller
{
    private $mod = array();
    public function push($key,$value);
    {
        //实现你的代码,将类注册进$this->mod;
    }
    public function pop($key)
    {        
        //实现你的代码,将$this->mod[$key]值为null;
    }
    public function execute($key)
    {
        //在这里实现你的代码,生成实例.注意利用php5新的特性,异常的处理
    }
}
好了,下面是表现层,这里将实现Interface View
abstract ArticleView implements View
{
    protected $smarty = null;
    public function __construct()
    {
        $this->smarty = new Smarty();
        ///下面你可以定义smarty的一些属性值
    }
}
具体的页面,例如科技文章的显示页面
class TechArticleView extends ArticleView
{
    public function display()
    {
        //实现你的代码,调用Tech类和更多的DataBaseOperation子类
    }
}
好了,下面是总入口  index.php
try
{
    $viewController = new ViewController();
    $viewController->push("tech",TechArticleView);  
//持续的增加  
    $mod = $_GET["mod"]_GET["mod"]_POST["mod"];
    //最后
    $viewController->execute($key);
}
catch(Exception $e)
{
        //如何处理异常就是你的事了
}

论坛徽章:
52
码神
日期:2017-03-28 10:27:10综合交流区版块每日发帖之星
日期:2015-10-11 06:20:00综合交流区版块每日发帖之星
日期:2015-09-28 06:20:00综合交流区版块每日发帖之星
日期:2015-09-22 06:20:00每日论坛发贴之星
日期:2015-09-12 06:20:00综合交流区版块每日发帖之星
日期:2015-09-12 06:20:00综合交流区版块每日发帖之星
日期:2015-09-08 06:20:00综合交流区版块每日发帖之星
日期:2015-09-05 06:20:00综合交流区版块每日发帖之星
日期:2015-09-04 06:20:002015亚冠之德黑兰石油
日期:2015-09-01 10:41:53每日论坛发贴之星
日期:2015-10-11 06:20:00综合交流区版块每日发帖之星
日期:2015-10-12 06:20:00
2 [报告]
发表于 2008-07-27 16:27 |只看该作者

回复 #1 mz198424 的帖子

沙发,每天发几个,什么时候能换衣服啊?

论坛徽章:
52
码神
日期:2017-03-28 10:27:10综合交流区版块每日发帖之星
日期:2015-10-11 06:20:00综合交流区版块每日发帖之星
日期:2015-09-28 06:20:00综合交流区版块每日发帖之星
日期:2015-09-22 06:20:00每日论坛发贴之星
日期:2015-09-12 06:20:00综合交流区版块每日发帖之星
日期:2015-09-12 06:20:00综合交流区版块每日发帖之星
日期:2015-09-08 06:20:00综合交流区版块每日发帖之星
日期:2015-09-05 06:20:00综合交流区版块每日发帖之星
日期:2015-09-04 06:20:002015亚冠之德黑兰石油
日期:2015-09-01 10:41:53每日论坛发贴之星
日期:2015-10-11 06:20:00综合交流区版块每日发帖之星
日期:2015-10-12 06:20:00
3 [报告]
发表于 2008-07-27 17:55 |只看该作者
这么好的帖子,没人回。。。

论坛徽章:
0
4 [报告]
发表于 2008-07-28 09:37 |只看该作者
你发的几个精华帖子 能否 禁用 Smilies?

论坛徽章:
52
码神
日期:2017-03-28 10:27:10综合交流区版块每日发帖之星
日期:2015-10-11 06:20:00综合交流区版块每日发帖之星
日期:2015-09-28 06:20:00综合交流区版块每日发帖之星
日期:2015-09-22 06:20:00每日论坛发贴之星
日期:2015-09-12 06:20:00综合交流区版块每日发帖之星
日期:2015-09-12 06:20:00综合交流区版块每日发帖之星
日期:2015-09-08 06:20:00综合交流区版块每日发帖之星
日期:2015-09-05 06:20:00综合交流区版块每日发帖之星
日期:2015-09-04 06:20:002015亚冠之德黑兰石油
日期:2015-09-01 10:41:53每日论坛发贴之星
日期:2015-10-11 06:20:00综合交流区版块每日发帖之星
日期:2015-10-12 06:20:00
5 [报告]
发表于 2008-07-28 15:07 |只看该作者

回复 #4 zhuomingliang 的帖子

什么意思???? 没有明白?

什么是 禁用 Smilies?

论坛徽章:
0
6 [报告]
发表于 2008-07-28 15:50 |只看该作者

回复 #1 mz198424 的帖子

这么好的文章,可惜没有Smilies

论坛徽章:
0
7 [报告]
发表于 2008-07-28 15:51 |只看该作者

论坛徽章:
52
码神
日期:2017-03-28 10:27:10综合交流区版块每日发帖之星
日期:2015-10-11 06:20:00综合交流区版块每日发帖之星
日期:2015-09-28 06:20:00综合交流区版块每日发帖之星
日期:2015-09-22 06:20:00每日论坛发贴之星
日期:2015-09-12 06:20:00综合交流区版块每日发帖之星
日期:2015-09-12 06:20:00综合交流区版块每日发帖之星
日期:2015-09-08 06:20:00综合交流区版块每日发帖之星
日期:2015-09-05 06:20:00综合交流区版块每日发帖之星
日期:2015-09-04 06:20:002015亚冠之德黑兰石油
日期:2015-09-01 10:41:53每日论坛发贴之星
日期:2015-10-11 06:20:00综合交流区版块每日发帖之星
日期:2015-10-12 06:20:00
8 [报告]
发表于 2008-07-28 15:55 |只看该作者

回复 #7 19193213 的帖子

只有灌水的回?

论坛徽章:
0
9 [报告]
发表于 2008-07-28 15:58 |只看该作者

回复 #8 mz198424 的帖子

我不是来灌水的.

论坛徽章:
52
码神
日期:2017-03-28 10:27:10综合交流区版块每日发帖之星
日期:2015-10-11 06:20:00综合交流区版块每日发帖之星
日期:2015-09-28 06:20:00综合交流区版块每日发帖之星
日期:2015-09-22 06:20:00每日论坛发贴之星
日期:2015-09-12 06:20:00综合交流区版块每日发帖之星
日期:2015-09-12 06:20:00综合交流区版块每日发帖之星
日期:2015-09-08 06:20:00综合交流区版块每日发帖之星
日期:2015-09-05 06:20:00综合交流区版块每日发帖之星
日期:2015-09-04 06:20:002015亚冠之德黑兰石油
日期:2015-09-01 10:41:53每日论坛发贴之星
日期:2015-10-11 06:20:00综合交流区版块每日发帖之星
日期:2015-10-12 06:20:00
10 [报告]
发表于 2008-07-28 16:06 |只看该作者

回复 #9 19193213 的帖子

那怎么只回个
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP