php实现简单MVC-php教程

资源魔 23 0
正在PHP中应用MVC愈来愈盛行了,特地是正在一些开源的框架傍边。MVC足以应答年夜少数的状况,但另有一些状况是其没有太适宜的,如比拟简略的集体博客,关于只有几百篇文章量级的博客,应用MVC让人感觉有些太复杂了;一样关于新浪等流派网站,应用MVC,将有年夜量的文件被加载,关于速率的影响是无奈承受的。枫竹梦引见MVC的根本原理及一种简略的完成。以下引见内容实用PHP开发。

PHP中的MVC(保举学习:PHP视频教程)

MVC[1]正在软件工程中是一种软件的架构。从php的角度来说MVC有一些没有同。

Model(模子),顺序使用性能的完成,顺序的逻辑的完成。正在PHP中担任数据治理,数据天生。

View(视图),图形界面逻辑。正在PHP中担任输入,解决若何挪用模板、需求的资本文件。

Controller(管制器),担任转发申请,对申请解决。正在PHP中依据申请决议挪用的视图及应用的数据。

为何应用MVC

MVC的次要作用是为了将代码分层、分类。

MVC的次要目的是为理解决Web开发中别离开发与设计工作,使其工作绝对自力。

正在这样的进程中还发现了其余的一些优点,网站的目次构造愈加明晰,网站更容易保护与扩大,能够完成模块的复用。

MVC完成

申请URL

起首,商定申请页面时的URL,以以下构造进行完成:

localhost/index.php?c=demo&a=index¶m=welcome

假如想失去愈加柔美的URL构造,能够进行优化,为由这URL构造优化与本文关系没有年夜,当前进行分享。

从下面的参数能够看出,拜访的文件是index.php,同时含有3个参数辨别为c、a、param。

MVC目次构造

接着,布局MVC的目次构造以下:

 /*
 ├─www                       # 网站根目次
 │  ├─controller             # 管制器目次
 │  │  ├─democontroller.php  # demo管制器
 │  ├─model                  # 模子目次
 │  │  ├─model.php           # model模子
 │  ├─view                   # 视图目次
 │  │  ├─index.php           # index视图
 │  ├─index.php              # 入口文件
 */

管制器controller

将以下代码增加到controller/democontroller.php文件中。

 // controller/democontroller.php
 class DemoController
 {
     public function index()
     {
     echo 'hello world';
     }
 }// End of the class DemoController
 // End of file democontroller.php

正在这个文件中仅仅界说了一个DemoController的类,且其只蕴含一个index办法,用于输入hello world。

将上面代码增加到入口文件index.php文件中。

 //index.php
 require('controller/democontroller.php');
 $controller = new DemoController();
 $controller->index();
 // End of index.php

正在阅读器中应用下面的商定的URL进行拜访,看到输入hello world。当然假如你申请的URL没有是那样,而是以下面所示也能失去一样的输入。

localhost/index.php?c=abc

发现URL中的参数尚未任何作用。

假如应用上面的URL进行拜访,能够预感没有会有任何输入。

localhost/controller/democontroller.php

能够看到要想拜访这个网站并失去正确的后果,今朝只能经过index.php来拜访,这也是为何称它为入口文件的缘由。如今无论参数若何只能拜访一样一个页面,那末若何来决议显示没有同的后果呢?或许挪用没有同的管制器呢?

改良入口文件

上面行使URL中的参数来决议应用哪一个管制器。

  //index.php
 // get runtime controller prefix
 $c_str = $_GET['c'];
 // the full name of controller
 $c_name = $c_str.'controller';
 // the path of controller
 $c_path = 'controller/'.$c_name.'.php';
 // get runtime action
 $method = $_GET['a'];
 // load controller file
 require($c_path);
 // instantiate controller
 $controller = new $c_name;
 // run the controller  method
 $controller->$method();
 // End of index.php

一样正在阅读器中应用下面的商定的URL进行拜访,看到输入hello world。代码中的正文曾经阐明了每一一步的目的。当然能够经过扭转URL参数中的c与a值来挪用没有同的controller及其办法,以输入没有同的后果。

视图View

后面只是应用了管制器controller,同时正在入口文件index.php中完成了静态挪用没有同的管制器。接着退出视图将显示别离。

 // view/index.php
 class Index {
     public function display($output) {
         // ob_start();
         echo $output;
     }
 }
 // End of index.php

视图目次中的index.php文件中界说了Index办法,且只有一个display()函数,担任将通报给它的变量进行输入。

上面修正管制器文件。

 // controller/democontroller.php
 class DemoController
 {
     private $data = 'Hello furzoom!';
     public function index()
     {
     //echo 'hello world';
     require('view/index.php');
     $view = new Index();
     $view->display($data);
     }
 }// End of the class DemoController
 // End of file democontroller.php

正在管制器中界说了一个data公有变量,index()办法再也不间接输入,而是应用视图工具解决输入。此时,按下面的商定的URL进行拜访时,将看到输入:

Hello furzoom!

能够依据没有同的申请挪用没有同的视图类,以没有同的方式显示数据。这样就将添加了视图的作用,设计职员能够只针对视图进行页面的设计。

模子Model

下面貌似曾经很cool了,然而显示甚么样的内容是正在管制器中间接指定的,心愿内容也由URL指定,这样将数据的解决交给模子来解决。

 // model/model.php
 class Model {
     private $data = array(
                 'title' => 'Hello furzoom',
                 'welcome' => 'Welcome to furzoom.com',
                 );
     public function getData($key) {
         return $this->data[$key];
     }
 }
 // End of model.php

视图文件model.php界说了一个Model类,类中界说了一个getData()的办法,用于前往申请的数据。

同时修正入口文件index.php以下:

  //index.php
 // get runtime controller prefix
 $c_str = $_GET['c'];
 // the full name of controller
 $c_name = $c_str.'controller';
 // the path of controller
 $c_path = 'controller/'.$c_name.'.php';
 // get runtime action
 $method = $_GET['a'];
 // get runtime parameter
 $param = $_GET['param'];
 // load controller file
 require($c_path);
 // instantiate controller
 $controller = new $c_name;
 // run the controller  method
 $controller->$method($param);
 // End of index.php

添加了一个参数$param,将其作为管制器的办法挪用参数。

还需求修正管制器的办法依据没有同参数获得没有同的数据。

 // controller/democontroller.php
 class DemoController
 {
     // private $data = 'Hello furzoom!';
     function index($param)
     {
     // echo 'hello world';
         require('view/index.php');
     require('model/model.php');
     $model = new Model();
     $view = new Index();
     $data = $model->getData($param);
     $view->display($data);
     }
 }// End of the class DemoController
 // End of file democontroller.php

蕴含需求的视图文件以及模子文件,而后天生视图与模子文件,接着经过模子工具获得数据,再用视图工具来输入获得的数据。

此时,正在阅读器中应用下面的商定的URL进行拜访,将失去输入以下:

Welcome to furzoom.com

至此PHP的MVC模式曾经根本引见实现了,残余的工作就是依据需求进行增加裁减了,很简略吧!!

以上就是php完成简略MVC的具体内容,更多请存眷资源魔其它相干文章!

标签: php php开发教程 php开发资料 php开发自学 MVC

抱歉,评论功能暂时关闭!