本帖最后由 default7 于 2014-05-15 18:39:05 编辑
这个帖子送给那些被ThinkPHP命名搞得晕头转向的PHP程序员~(by default7#zbphp.com)
4年前我的几个帖子帖子1 《
跟别人争论PHP中MVC的问题》 http://bbs.csdn.net/topics/350216861
发表于: 2010-12-10 22:38:53
其实这个帖子当时是使用ThinkPHP,但是运行极为缓慢,且网址怎么都对不上,最后放弃了使用MVC框架!
帖子2 《
貌似突然理解了MVC模型》http://bbs.csdn.net/topics/390332774
发表于: 2012-12-29 16:47:22
这个帖子里面对MVC的理解其错误的,那种方法是工厂模式,并非MVC模式。
PHP MVC真心折磨人啊!!!~MVC 是Model View Controller的缩写,是一种程序设计方式。可我虽然工作已经有五六年,一直做PHP程序员,但是始终没用过MVC框架更一直被MVC搞的晕头转向。国内MVC框架基本上都是ThinkPHP,很多次找工作,因为不会MVC,因为不用ThinkPHP框架,所以一直碰壁,越来越迷惑 怀疑 不解 抑郁。
这一次再次硬着头皮去理解掌握的心态,重新阅读ThinkPHP框架的官网资料,不过还是很遗憾,网址对应这里仍旧没看懂,越看越晕。不是说MVC吗,
为什么没有Controller类? 为什么会出现一个Action类?“
控制器”怎么不见了,但是却有一个“Action”? 为什么有“网址参数a”和“参数m”?
“参数a”是不是指代“Action类”?“参数m”是不是指代“Model类”??
ThinkPHP 为什么会这么难
//文件地址:D:\zbphp.com\www\Lib\Action\MemberAction.class.php
class MemberAction extends Action {
public function index(){
$this->display();
}
public function login(){
$this->display();
}
public function register(){
$this->display();
}
}
每次看到ThinkPHP引以为傲的路由网址,就觉得晕!index.php?a=&m=,看到这样的网址,心里就会想“参数a的值”应该是指代“Action类”吧,那数“参数m”应该是指代MVC中的Model吧(模型)?
但是又觉得哪里不对。
Action是动作的意思,MVC是Model View Controller,那么为什么没有看到Controller类?后来仔细看,原来Action在ThinkPHP中就是控制器(但为什么要命名为Action??为什么不直接命名为Controller??)
再来说参数m,一开始理解就是Model类吧。但是更觉得奇怪,比如访问 index.php?a=index&m=content ,那按照这样的思路访问的就是 class IndexAction 下面的 content() 方法,不过很遗憾,错了。他访问的是 class ContentAction 下面的 index()方法。。。
到了这里,你就会明白了为什么ThinkPHP框架会这么难会这么复杂,
因为他用了极容易混淆的方式来命名关键部分。
害人不浅的ThinkPHP 写到这里我真的忍不住想说ThinkPHP害人不浅,命名上弄出了
1) 网址参数a和类中的Action;
2) 网址参数m 和类中的Model;
3) 是MVC框架但却用Action类来表示Controller;
由于这三点让绝大多数想弄明白MVC的PHP程序员每次看都是一头雾水!
如果ThinkPHP 这样写,大部分人会立即明白MVC架构
//文件 D:\zbphp.com\www\Lib\Controller\MemberController.class.php
class MemberController extends Controller {
//访问地址 index.php?c=Member&a=index
public function indexAction(){
$this->display();
}
//访问地址 index.php?c=Member&a=login
public function loginAction(){
$this->display();
}
//访问地址 index.php?c=Member&a=register
public function registerAction(){
$this->display();
}
}
写在最后最新消息,ThinkPHP 最新版本3.2.x 改正了这几点,Action类改名为Controller。网址中m参数改成了c参,变得直观易懂!
最后感言:几年来一直被MVC困扰,越是去研究ThinkPHP越是觉得一头雾水。一路走来,一路错,还好坚持了,不然真的被搞得彻底放弃了。(欢迎交流 by default7#zbphp.com)
------解决方案--------------------称为 Action 而不是 Controller 是有道理的
Action 基类 完成了 Controller 的工作
而派生于 Action 的类完成的是 Model (业务模型)的工作
而 Model 类只是数据表的映射
其实认真看一下开发手册就都知道了,何苦要花4年时间?
------解决方案--------------------愿楼主珍重
------解决方案--------------------有这么难理解吗?
------解决方案--------------------雖然菊花一緊,但是我還是認為樓主終於通靈而感到欣慰。
時間長短不要緊,重要的是你終於悟出來了
------解决方案--------------------主要还是因为,thinkphp是“借鉴”SSH,在SSH里面的MVC就是这样命名的。
------解决方案--------------------自己简单实现 下MVC整个流程就明白了。
新手也许就3个月一年才能实现。老手实现Thinkphp框架同样功能(mvc主要功能)。也就最多几天或者几个小时。
本php版主估计3小时就足够了吧。
ThinkPHP作者可是php顶尖高手。
ThinkPHP极为简单,而为极为强大,这者作者厉害的地方。
手册也非常完善方便。
------解决方案--------------------你搞错了,thinkphp 2.x 也就是你说的什么action的,是最清晰的,代码也是最易懂得
现在的thinkphp 3.x,反而变得复杂不易懂了。
------解决方案--------------------确实很多东西需要悟
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
相关文章
相关视频
网友评论
文明上网理性发言,请遵守 新闻评论服务协议
我要评论