PHP 如何写 MVC

早上刚吃完包子,收拾完电脑,我准备给刚入行做网站开发的表弟发点实用的东西——毕竟他总说绕来绕去的MVC像个“看不懂的天书”,尤其是他用PHP做小商城,总把代码揉在一块儿改起来就头疼。

我先给他发了个小例子,就拿他最熟的“包子订单”来说吧,先讲啥是MVC。不用讲“模型-视图-控制器”的术语,就说这三部分是三个分工明确的人:一个管包子馅(数据),一个管给客人看的菜单(页面),一个管客人点单、后厨做包子、传菜单的传话员,这样他一下就懂了。

PHP 如何写 MVC

接下来我给他分了段,先讲怎么拆这三部分。

第一步:先做“管包子馅”的模型

这部分专门管数据,就像包子馅不能露在外面,这部分代码只负责存和取数据,不会掺着页面。还是拿他的订单来说,写个类,里面就放查订单、存订单的方法,比如从数据库拿“今天的包子订单列表”,或者把客人点的包子存进数据库。就像后厨只负责调馅、做包子,不会管客人看啥菜单。

第二步:再做“管菜单”的视图

这部分就是客人能看到的页面,比如订单列表的展示页,或者点单的表单页面。这里面只有HTML和一点点展示用的简单代码,绝对不能写查数据库的东西。比如要显示“张三点了2个肉包”,就直接拿模型里查好的数据来用,就像菜单只写“肉包2元”,不会自己去后厨调馅。

第三步:最后做“管传话”的控制器

这部分是中间的传话员,客人点单先找他,他就去后厨(模型)拿包子馅,然后给客人看菜单(视图)。比如客人要查订单,控制器就说:“模型,给我拿今天的订单!”拿到数据后,就递给视图,让视图把订单显示出来。就像服务员,不会自己做包子也不会自己写菜单,只负责传消息。

我还给他举了个他之前犯的小错误:之前他写PHP代码,把查订单的代码直接写在页面里,改个订单状态就得翻大段页面代码,就像服务员自己去后厨做包子,忙乱还容易错。现在拆成MVC后,改数据就找模型,改页面就找视图,改传消息就找控制器,哪怕换个页面,只要模型不变,订单数据不用重写。

最后我补了个超简单的小结构,让他先试试,不用搞复杂框架,就用基本的类写就行,比如:

模型类专门写数据库操作;

视图就是HTML文件,插变量就行;

控制器就是个中转的PHP文件,把模型和视图连起来。

他之前总怕MVC难,其实就是把“做包子、写菜单、传消息”三个活儿分开,谁也不掺和,改起来就清爽多了。我还跟他说,等他试了这个小例子,再去看框架里的MVC就不会晕了,毕竟先搞懂“怎么拆”比“用什么框架”重要。

上一篇 Java Runnable 和 Callable 区别