手先感谢慕课网平台能让我有幸听到大牛singwa老师的php课程,这套课程对我的php学习之路产生了很大的影响,由于文笔有限,还是分类讨论。这一篇的话说一下关于如何理解MVC框架并去编写类似于thinkphp结构的自己的框架!
整理思路为singwa老师课程+慕课老师pengcheng<<
MVC架构模式分析与设计>>所得出的心得。
关于MVC思想的理解:
singwa老师的课程是基于当前主流php框架"thinkPHP"所编写的CMS文章管理系统。课程中严格利用MVC思想进行了编码规范,让学习的小伙伴对MVC思想能有一个很深的认识,对喜欢PHP的小伙伴入门进阶很有帮助哟!
说到MVC 姑且将他们叫成 小M 小V 小C吧;
小C是一个协调能力很强的Girl,它的工作是经常和 小M 小V进行交流交互,当然由于她十分外向,所以也和浏览器用户打成一片。
接受到浏览器用户的指令 如果这个指令里要求小M也参一脚的话!小C就要开始和小M交流咯。此时小M时看管着数据库的大门的,平时很喜欢小C,这个时候为了“爱情”他愿意打开数据库的大门取出小C需要的东西(数据),然后小C很简单粗暴的var_dump()一下(输出数据库的内容),就在这个时候,用户觉得小M给小C的东西太赤裸裸了,不好看的!所以小C就想到了一个老友
—
小V,小V醉擅长穿搭了。她也很乐意帮助小C,就帮小C把从小M那里取到的“赤裸裸的数据”给美化了一下,然后送给了小C。此时小C把经过美化的“不再赤裸裸的数据”送给了用户,用户很满意!
很不擅长讲编这种故事,但是自己还是想尝试一下,莫喷。
总之在一个建议的CMS系统中 C负责逻辑代码处理 M负责数据库的交互提取 V负责输出到浏览器的模板操作。
关于PHP框架:
经过对课程的学习和研究,对PHP框架的一些基本原理也慢慢有了自己的认识。当然只是认识,可能还是会有错误的!在这里说几个比较重要的点吧。
一、 如何做出一个这样的URL链接:http://xxx.com/index.php?c=index&a=add
上面是一个典型的thinkphp所生成的url入口链接。那么m为模块,c为控制器名称,a为此控制器下的方法名称。
那么怎么才能实现在这样url形式呢?其实很简单 用的就是我们经常用到的$_GET[] ,举个栗子!按照上述的url形式的话 我们此时的$_GET[c] 就等于index,$_GET[a]就等于add,此时 我们就可以这样去做:
1、创建一个indexcontroller.php (不一定非要这么写 可以自己去规定)
2、打开创建的文件 写上如下代码:
class indexController{ public function add(){ echo "hello"; } }
3、可见我们很简单的创建了一个类和一个类里面的方法 类名为indexController 方法为 add 那么这个时候 我们正常情况下如果想执行add方法我们会怎么做呢?说对了!实例化对象,然后 -> 箭头戳方法就可以了!代码如下:
$obj=new indexController;$obj->add();
4、好了,那么我们知道怎么去用常规方法去执行这个类里的方法了,此时我们要做的就是框架化,把下面代码写入传说中的入口文件 index.php(URL屁股后面带参数的文件名 可以为任意文件名 自己改~)!代码如下:
if(isset($_GET['c']))&&isset($_GET['a']) ){ //如果控制器C A 被设置了! 那么我们要做的是 包含这个控制器文件进来 require(''..");//这里拼接的形式就是 :目录/$_GET[c]."Controller.php"; //文件已经包含进来了 那么可以实例化这个文件里的类并使用类里的方法了 $obj= new $_GET[c]."Controller"; $obj->$_GET['a'](); }
5、经过上述四步 就能简单的实现一个 访问
http://xxx.com/index.php?c=index&a=add 就能输出一个 hello
6、既然是这样的话 我们何不在add方法里也写一条代码呢?这样就可以简单的实现V层了。太简单了 require("xx.html");搞定!
【PS:上面的纯粹是在慕课的编辑器里手打的,没有经过测试,只是一个小思路!具体还要对get到的值进行各种字符处理,对入口文件里写的代码进行进一步封装就是后面优化的事情啦!】
二、实现M层
大家都知道M层是用来进行数据库操作的,其实他的实现方法和C差不多。只不过和C干的事情不一样而已。还是举个栗子!
1、创建一个NewsModel.php (不一定非要这么写 可以自己去规定)
3、封装数据库的基本操作类 DB.class.php 增删改查 根据ID更 改 查 删.. 根据 XX更改查删【这里就不细写了,懒】
2、打开创建的文件 写上如下代码:
require("DB.class.php");//包含数据库操作类 这个可以写在入口文件哟。这里为了理解就先包含在这里啦!
class NewsModel{ $_db=""; //下面多了一个构造函数 也就是在实例化的时候,自动执行构造函里的方法!构建一个数据库 操作对象。 public function __contruct(){ $this->_db=new DB; //实例化一个数据库操作对象!可以开始大肆的操作数据库了! } public function add(){ $this->_db->add(); //比如DB类里有一个add方法!这里就可以调用到啦!接下来的事情你懂得! } }
3、和控制器曾实现一样!实例化对象,然后 -> 箭头戳方法就可以了!代码如下:
$obj=new NewsModel;$obj->add();
4、好了,那么我们怎么去在C里去执行M的方法呢?还是很简单啦!此时我们要封装一个函数 姑且称为 D 即
function D($name){ require_once('目录/'.$name.'Model.php'); $obj = 'new'.$name.'Model()'; //不知道拼接的是否正确 就是实例化一个model对象 return $obj; //返回此对象 }
5、好了 那么接下来 我们也在 C里执行M的方法了!怎么做呢?比如执行的是NewsModel下的方法!
$obj=D("News"); D("News")->add(); //这里跳跃性有点 大家往上拉看看newsModel这个类就明白了!!!
6、就这样 小C终于了小M勾结在了一起!
从实战课程中 学到的当然不止这些,当然这些也是比较基础的东西,但是自己一个字一个字敲出来我觉得还是蛮有意义的!除了关于建设自己的php框架和mvc思想的理解外,从课程中还学到了很多web JS操作的技巧。并且对ajax异步请求有了更深层次的了解。感谢singwa老师,感谢慕课网。写完罢工!继续去码代码看课程咯!
链接: https://pan.baidu.com/s/1DO74hGs2ia0g5qTelMQ3VA 提取码: pgjp 复制这段内容后打开百度网盘手机App,操作更方便哦
坪地网站改版公司网站建设的目的。更新的重要性。站应注意常规信息更新,而不仅仅是更新。此外,站发展及时...
这套教程算是比较全的一套DIV+CSS教程了。主要是:课程全、资料全(包含课程中附件)、讲解也挺详细本课内容...
要声明一点的是,这是基础教程,进阶的请下载后面发布的。基础是根本,工欲善其事,必先利其器。下载地址 链...
Bootstrap基于 HTML、CSS、JAVASCRIPT的,它简洁灵活,将常见的CSS布局、常用组件和JavaScript插件进行了完...