백엔드 개발 PHP 튜토리얼 【PHP】MVC框架为何这么难! 4年后终于明白了,被ThinkPHP害得!

【PHP】MVC框架为何这么难! 4年后终于明白了,被ThinkPHP害得!

Jun 13, 2016 am 11:59 AM
action controller mvc nbsp thinkphp

【PHP】MVC框架为什么这么难!!! 4年后终于明白了,被ThinkPHP害得!!

本帖最后由 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 为什么会这么难
<br /><?php<br />//文件地址:D:\zbphp.com\www\Lib\Action\MemberAction.class.php<br />class MemberAction extends Action {<br /><br />    public function index(){<br />        $this->display();<br />    }<br /><br />    public function login(){<br />        $this->display();<br />    }<br /><br />    public function register(){<br />        $this->display();<br />    }<br />}<br />
로그인 후 복사

每次看到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架构
<br /><?php<br />//文件 D:\zbphp.com\www\Lib\Controller\MemberController.class.php<br />class MemberController extends Controller {<br /><br />    //访问地址 index.php?c=Member&a=index<br />    public function indexAction(){<br />        $this->display();<br />    }<br /><br />    //访问地址 index.php?c=Member&a=login<br />    public function loginAction(){<br />        $this->display();<br />    }<br /><br />    //访问地址 index.php?c=Member&a=register<br />    public function registerAction(){<br />        $this->display();<br />    }<br />}<br />
로그인 후 복사



写在最后

最新消息,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으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Windows 11에서 밝기를 조정하는 10가지 방법 Windows 11에서 밝기를 조정하는 10가지 방법 Dec 18, 2023 pm 02:21 PM

화면 밝기는 최신 컴퓨팅 장치를 사용할 때 필수적인 부분이며, 특히 화면을 장시간 볼 때 더욱 그렇습니다. 눈의 피로를 줄이고, 가독성을 높이며, 콘텐츠를 쉽고 효율적으로 보는 데 도움이 됩니다. 그러나 설정에 따라 밝기 관리가 어려울 수 있으며, 특히 새로운 UI 변경이 적용된 Windows 11에서는 더욱 그렇습니다. 밝기를 조정하는 데 문제가 있는 경우 Windows 11에서 밝기를 관리하는 모든 방법은 다음과 같습니다. Windows 11에서 밝기를 변경하는 방법 [10가지 설명] 단일 모니터 사용자는 다음 방법을 사용하여 Windows 11에서 밝기를 조정할 수 있습니다. 여기에는 단일 모니터를 사용하는 데스크탑 시스템과 노트북이 포함됩니다. 시작하자. 방법 1: 알림 센터 사용 알림 센터에 액세스할 수 있습니다.

Safari에서 iPhone의 개인 브라우징 인증을 끄는 방법은 무엇입니까? Safari에서 iPhone의 개인 브라우징 인증을 끄는 방법은 무엇입니까? Nov 29, 2023 pm 11:21 PM

iOS 17에서 Apple은 모바일 운영 체제에 몇 가지 새로운 개인 정보 보호 및 보안 기능을 도입했습니다. 그 중 하나는 Safari의 개인 탐색 탭에 대해 2단계 인증을 요구하는 기능입니다. 작동 방식과 끄는 방법은 다음과 같습니다. iOS 17 또는 iPadOS 17을 실행하는 iPhone 또는 iPad에서 Safari에 개인 정보 보호 브라우징 탭이 열려 있는 경우 이제 Apple 브라우저에 Face ID/Touch ID 인증이나 암호가 필요하며, 다시 액세스하려면 세션이나 앱을 종료해야 합니다. 즉, 잠금이 해제된 iPhone이나 iPad를 다른 사람이 손에 넣는 경우에도 비밀번호를 모르면 개인정보를 볼 수 없습니다.

thinkphp 프로젝트를 실행하는 방법 thinkphp 프로젝트를 실행하는 방법 Apr 09, 2024 pm 05:33 PM

ThinkPHP 프로젝트를 실행하려면 다음이 필요합니다: Composer를 설치하고, 프로젝트 디렉터리를 입력하고 php bin/console을 실행하고, 시작 페이지를 보려면 http://localhost:8000을 방문하세요.

Win10/11 디지털 활성화 스크립트 MAS 버전 2.2는 디지털 활성화를 다시 지원합니다. Win10/11 디지털 활성화 스크립트 MAS 버전 2.2는 디지털 활성화를 다시 지원합니다. Oct 16, 2023 am 08:13 AM

유명한 활성화 스크립트 MAS2.2 버전은 @asdcorp에서 시작된 방법이며 MAS 작성자는 이를 HWID2라고 부릅니다. https://github.com/massgravel/Microsoft-Activation-Scriptsgatherosstate.exe(원래 버전 아님, 수정됨)를 다운로드하고 매개변수를 사용하여 실행한 후 GenuineTicket.xml 티켓을 생성하세요. 먼저 원래 방법(gatherosstate.exePfn=xxxxxxx;DownlevelGenuineState=1)을 살펴본 다음 최신 방법(gatheros)과 비교해 보세요.

thinkphp에는 여러 버전이 있습니다. thinkphp에는 여러 버전이 있습니다. Apr 09, 2024 pm 06:09 PM

ThinkPHP에는 다양한 PHP 버전용으로 설계된 여러 버전이 있습니다. 메이저 버전에는 3.2, 5.0, 5.1, 6.0이 포함되며, 마이너 버전은 버그를 수정하고 새로운 기능을 제공하는 데 사용됩니다. 최신 안정 버전은 ThinkPHP 6.0.16입니다. 버전을 선택할 때 PHP 버전, 기능 요구 사항 및 커뮤니티 지원을 고려하십시오. 최상의 성능과 지원을 위해서는 최신 안정 버전을 사용하는 것이 좋습니다.

thinkphp를 실행하는 방법 thinkphp를 실행하는 방법 Apr 09, 2024 pm 05:39 PM

ThinkPHP Framework를 로컬에서 실행하는 단계: ThinkPHP Framework를 로컬 디렉터리에 다운로드하고 압축을 풉니다. ThinkPHP 루트 디렉터리를 가리키는 가상 호스트(선택 사항)를 만듭니다. 데이터베이스 연결 매개변수를 구성합니다. 웹 서버를 시작합니다. ThinkPHP 애플리케이션을 초기화합니다. ThinkPHP 애플리케이션 URL에 접속하여 실행하세요.

DJI Osmo Action 5 Pro: 소매업체가 GoPro Hero 13 Black을 약화시킬 수 있는 출시 가격을 공개함에 따라 출시 날짜가 불투명해졌습니다. DJI Osmo Action 5 Pro: 소매업체가 GoPro Hero 13 Black을 약화시킬 수 있는 출시 가격을 공개함에 따라 출시 날짜가 불투명해졌습니다. Sep 04, 2024 am 06:51 AM

DJI는 아직 새로운 액션 카메라 출시 계획을 확정하지 않았습니다. 대신 GoPro는 9월 4일에 두 개의 새로운 액션 카메라를 출시할 것이라고 예고하면서 올해 경쟁사보다 앞서 나갈 것으로 보입니다.

laravel과 thinkphp 중 어느 것이 더 낫나요? laravel과 thinkphp 중 어느 것이 더 낫나요? Apr 09, 2024 pm 03:18 PM

Laravel과 ThinkPHP 프레임워크의 성능 비교: ThinkPHP는 일반적으로 최적화 및 캐싱에 중점을 두고 Laravel보다 성능이 좋습니다. Laravel은 잘 작동하지만 복잡한 애플리케이션의 경우 ThinkPHP가 더 적합할 수 있습니다.

See all articles