【PHP面试题】谈谈对MVC的工作原理的认识

文章目录
一、考点
1、MVC工作原理
1)工作原理
2)生活中的MVC - 饭店点餐
3)业务逻辑中的MVC - 用户注册
2、延伸
1)单一入口的工作原理
① 工作原理
② 特点:访问的永远都是同一个入口文件
③ 优势
④ 劣势
2)模板引擎的理解
① 常用模板引擎
② 工作原理
二、解题方法
三、真题
框架中什么是单一入口和多入口,单一入口的优缺点。
一、考点
1、MVC工作原理
1)工作原理
Model - 数据模型层:通常情况下对数据进行加工,进行一些其他的处理,与数据相关的一些操作都在 Model层 操作。
View - 视图层:跟用户进行交互的一些界面上的东西。
Controller - 控制层:用来处理业务逻辑的。

2)生活中的MVC - 饭店点餐
如:我们去饭店吃饭,吃饭之前首先得点餐,点餐需要叫 服务员(C层),一进饭店,我们会说:“服务员,给我来一份菜单。” 此时服务员会递交给我们一份 菜单(V层),用户就在这个位置进行交互,进行交互的时候会递给我们一份菜单,拿到菜单的时候,我们会去跟服务员去说:“我想吃西红柿炒鸡蛋。” 这个时候,我会把数据交给服务员,服务员将我的需求记录下来,在此处服务员做了一个处理,她会去接收用户通过 菜单(V层) 提交过来的菜名数据。服务员(C层) 拿到数据之后,她不会做这道菜,她会将这道菜交给 厨师(M层,数据处理层),此时我们看到, 厨师(M层) 与用户是没有任何交流的,只跟 服务员(C层) 有交流,然后 服务员(C层) 再去跟 厨师(M层) 交流,这个时候,厨师(M层) 就可以开始做这盘菜,做好之后,厨师(M层) 一按铃,跟 服务员(C层) 说:“这道菜好了” ,这个时候 服务员(C层) 再过来拿,即我们的 厨师(M层) 做好这盘菜后,交还给 服务员(C层),服务员(C层) 会将菜放到 桌上,此时我们就可以吃到这盘菜了。

服务员 - C层
菜单 - V层
厨师 - M层

 

3)业务逻辑中的MVC - 用户注册
注册用户
需要一个表单(V层),表单由 C层 来呈现。首先,用户先去 C层 ,要去注册用户,先将用户的表单呈现出来,交给 V层 呈现出来,用户去查看表单,满意后,把数据提交给 C层,C层 拿到提交过来的数据会做一些额外的处理(用户名是否合法,密码是否合法。。。。数据的处理),处理好后,再将数据交给 M层 ,此时 M层 会去连接数据库,把 C层 提交过来的数据插入到数据库中,此时数据库会返回一个结果(即受影响行数),成功之后,M层 会把结果再返回给 C层,最终会 提示用户注册成功,此时 C层 再返回一个结果给 V层 ,在V层显示正确的信息给用户。

 

2、延伸
1)单一入口的工作原理
① 工作原理
用一个处理程序文件处理所有的HTTP请求,根据请求时的参数的不同区分不同模块和操作的请求。(如:index.php?r=user/reg,在请求 index.php中,可以通过get接收到 r的参数,接收到参数后,可以拿到 user 和 reg ,可以 new user ,拿到对象后,去调用 reg()方法)【基本原理:拿到对应的值去调用方法】

 

 

② 特点:访问的永远都是同一个入口文件
如:无论什么时候,访问的都是 index.php,只需要改变访问的方法即可。

访问用户模块:index.php?r=user/reg
访问分类模块:index.php?r=cate/add
访问商品模块:index.php?r=product/add

③ 优势
可以进行统一的安全性检查(所有的请求都经过 index.php ,意味着我们在调用模块的时候,可以在 index.php 中做一些安全性的检查,如果访问的是不同的入口文件,即其他的入口文件也需要做安全性检查,只在 index.php 中访问,则做一道安全性检查即可,一夫当关万夫莫开);
集中处理程序。
④ 劣势
URL 不美观(使用 URL重写 解决);
处理效率会稍低。

2)模板引擎的理解
① 常用模板引擎
PHP是一种HTML内嵌式的在服务端执行的脚本语言,但是PHP有很多可以使PHP代码和HTML代码分开的模板引擎,例如:Smarty、Twig、Haml、Liquid等

注:建议把 Smarty 详细复习一下。

② 工作原理
模板引擎就是庞大的完善的正则表达式替换库 如:

$smarty->assign("name", "jack")
{
$name;    // 可以拿到 jack    【html代码实现】
}

会将整个 HTML的文件(如:user.html) 这个模板文件,全部都抓取出来,把里面的字符串,标签等都抓出来,抓出来后,去分析里面的字符,特殊的字符,如:$name 变量({$name}),分析好一个看,是 Smarty的变量,此时用正则表达式进行替换(由于在 assign操作的时候,就是在给 Smarty 的属性进行赋值,赋值内容为("name", "jack")这样的值),所以在此处直接替换成该值即可,这就是 Smarty的底层原理,它使用了正则表达式来完成,因此对于 Smarty来说,它就是一个庞大的完善的正则表达式替换库。

二、解题方法
1、牢记MVC思想内容,至少能背出来;
2、尝试使用PHP的一个MVC框架完成一个小功能(例如:简单的用户管理系统,完成用户的增删改查即可);
3、如果还是不知道该如何下手,可以参考《Yii2框架打造完美电商平台》课程。

三、真题
框架中什么是单一入口和多入口,单一入口的优缺点。
单一入口:不管访问哪个模块都使用同一个入口文件;
多入口:每个模块都有一个入口文件(可以前端设置一个入口文件 index.php,后端创建一个入口文件 admin.php,前后端的入口文件是独立的)
单一入口的优点:
       可以进行统一的安全性检查;
       集中处理程序。
单一入口的缺点:
       URL不美观(URL重写);
       处理效率会稍低。

posted @   李若盛开  阅读(392)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
点击右上角即可分享
微信分享提示