PHP中的MVC运用
php中的MVC模式运用11.15.2011, 架构, by admin. 首先我来举个例子:
一个简单的文章显示系统
简单期间,我们假定这个文章系统是只读的,也就是说这个例子将不涉及文章的发布,现在开始了。
由于只涉及数据库的读取,所以我定义了两个interface
1Interface DataOperation
2{
3 publicfunction select($info);
4 publicfunction selectNum($info);
5}
上面这interface定义了读取数据的接口,select方法将返回所需要的文章。selectNum方法返回文章的总数,这是分页显示时用到的。$info是一个数组,用来存放查询条件
1Interface DataSource
2{
3 publicstatic function getInstance();
4}
这里我们假定我们操作的是数据库,DataSource定义一个接口,所有实现该接口的实例类将得到一个静态对象
01Interface Controller
02{
03 publicfunction pop();
04 publicfunction push();
05 publicfunction execute();
06}
07Interface View
08{
09 publicfunction display();
10}
好了,我们来实现.
下面定义一个类来实现DataSource接口,这个类运用了单例模式
01class DataBaseSourceimplements DataSource
02{
03 publicstatic $instance = null;
04 publicstatic function getInstance()
05 {
06 if(self::$instance== null)
07 {
08 self::$instance== new PDO("mysql:host=localhost;dbname=article","root","123456");
09 }
10 returnself::$instance;
11 }
12}
定义一个抽象类来实现DataOperation,我们要共享一个数据库连接,所以我在抽象类中将这个数据库对象初始化,这样,所有的子类都能共享这个对象
01abstract classDataBaseOperation implementsDataOperation
02{
03 protected$db = null;
04 publicfunction __construct()
05 {
06 $this->db = DataBaseSource::getInstance();
07 }
08 publicfunction select($info);
09 publicfunction select($info);
10}
下面我来写一个业务子类来实现抽象类DataBaseOperation
01class Tech extends DataBaseOperation
02{
03 publicfunction select($info)
04 {
05 //在这里实现你的代码
06 }
07 publicfunction selectNum($info)
08 {
09 //在这里实现你的代码
10 }
11}
业务逻辑层我们实现了,下面是控制层
01class ViewControllerimplements Controller
02{
03 private$mod = array();
04 publicfunction push($key,$value);
05 {
06 //实现你的代码,将类注册进$this->mod;
07 }
08 publicfunction pop($key)
09 {
10 //实现你的代码,将$this->mod[$key]值为null;
11 }
12 publicfunction execute($key)
13 {
14 //在这里实现你的代码,生成实例.注意利用php5新的特性,异常的处理
15 }
16}
好了,下面是表现层,这里将实现Interface View
1abstract ArticleViewimplements View
2{
3 protected$smarty = null;
4 publicfunction __construct()
5 {
6 $this->smarty =new Smarty();
7 ///下面你可以定义smarty的一些属性值
8 }
9}
具体的页面,例如科技文章的显示页面
1class TechArticleViewextends ArticleView
2{
3 publicfunction display()
4 {
5 //实现你的代码,调用Tech类和更多的DataBaseOperation子类
6 }
7}
好了,下面是总入口index.php
01try
02{
03 $viewController= new ViewController();
04 $viewController->push("tech",TechArticleView);
05//持续的增加
06 $mod= $_GET["mod"]:$_GET["mod"]:$_POST["mod"];
07 //最后
08 $viewController->execute($key);
09}
10catch(Exception $e)
11{
12 //如何处理异常就是你的事了
13}
页:
[1]