作者:gj08rpb | 来源:互联网 | 2018-03-19 15:47
iMooc上的MVC教程练习。
MVC是PHP基础和进阶的分界点吧应该说是
一、准备
工欲善其事~
个人环境:windows10+wamp2.5+ZendStudio12;
项目名称:MVCEasyFirst;
文件命名:testController.class.php
文件名 控制器 类文件类型
代码标准:PSR-2;
二、搭建
Controller
1 php
2 namespace MVCEasyFirst\Controller\test;
3
4 use MVCEasyFirst\Model\test\testModel;
5 use MVCEasyFirst\View\test\testView;
6 //控制器是唯一需要和用户进行连接的地方
7 //控制器“承上启下”
8 //控制器负责:1、接收指令;2、调用模型并接收模型处理好的数据;3、调用视图(传递数据给视图)
9 class testController
10 {
11 public function show()
12 {
13 $testModel=new testModel();
14 $data=$testModel->get();
15 $testView=new testView();
16 $testView->display($data);
17 }
18 }
Model
1 php
2 namespace MVCEasyFirst\Model\test;
3
4 //模型负责:1、接收指令;2、处理并返回数据
5 //双向,但仅与控制器相连接
6 class testModel
7 {
8 public function get()
9 {
10 return "Hello world!";
11 }
12 }
View
1 php
2 namespace MVCEasyFirst\View\test;
3
4 //视图负责:1、接受指令;2、显示相关结果给浏览器/用户;
5 //单向通路,C->V->User
6 class testView
7 {
8 public function display($data)
9 {
10 echo $data;
11 }
12 }
三、调用
1 php
2 use MVCEasyFirst\Controller\test\testController;
3 require_once 'testController.class.php';
4 require_once 'testModel.class.php';
5 require_once 'testView.class.php';
6 //MVC大量依赖引入,推荐require,和我之前想的不太一样
7 //其实这个问题我个人觉得还是要分情况来说的,看是什么需求,需要运行(警告)还是发现问题所在(错误)
8
9 $testController=new testController();
10 $testController->show();
四、小结
简单的小例子,直观的了解MVC模型!!!
注意区分清楚各个模块的“职责”!
再有就是规范开发的情况:
五、入口程序与系统目录的规范化
把 MVC应用到生产中;
单一入口机制:在一个web应用中,所有的请求都指向一个脚本文件,比如alksdjfklajfklj.php,也就是说,所有对程序的访问都是必须通过这个入口。
优点:得以实现MVC;对什么安全什么的也似乎比较方便控制。
系统目录的规范化:
我就打算先这么干,至于以后那再说。
六、简化M\V\C调用
前面说过,MVC大量以来引用/调用,所以对于调用,不如写一个函数来集成/封装
1 php
2 namespace MVC\func;
3 //一些框架中简化用到的函数
4
5 function C($name,$method)
6 {
7 require_once '/libs/Controller/'.$name.'Controller.class.php';
8 //eval('$obj=new '.$name.'Controller();$obj->'.$method.'();');
9 $controller=$name.'Controller';
10 $obj=new $controller();
11 $obj->$method();
12 }
13
14 function M($name)
15 {
16 require_once 'libs/Model/'.$name.'Model.class.php';
17 $model=$name.'Model';
18 $obj=new $model();
19 return $obj;
20 }
21
22 function V($name)
23 {
24 require_once 'libs/View/'.$name.'View.class.php';
25 $view=$name.'View';
26 $obj=new $view();
27 return $obj;
28 }
其中,eval函数我也是第一次用,视频中讲不安全,就换成下面这些就好。
1 php
2 require_once 'func.php';
3
4 \MVC\func\C('test', 'show');
1 php
2 class testController
3 {
4 public function show()
5 {
6 echo "hello";
7 }
8 }
--------4/28更新---------------
我的环境问题或者其他什么,动态实例化类不可行,暂时放弃了,有哪个大师知道为什么,烦请告知啊~
环境:zend12+PHP5.5
这部分暂时这样,下一部分是smarty