PHP MVC运用

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); 



下面我来写一个业务子类来实现抽象类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) 

       //如何处理异常就是你的事了 

原文地址:https://www.cnblogs.com/wgphp/p/7884549.html