【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层

【PHP面试题】谈谈你对MVC的工作原理的认识。_第1张图片


3)业务逻辑中的MVC - 用户注册

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

【PHP面试题】谈谈你对MVC的工作原理的认识。_第2张图片


2、延伸

1)单一入口的工作原理

① 工作原理

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

【PHP面试题】谈谈你对MVC的工作原理的认识。_第3张图片

② 特点:访问的永远都是同一个入口文件

如:无论什么时候,访问的都是 index.php,只需要改变访问的方法即可。

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

【PHP面试题】谈谈你对MVC的工作原理的认识。_第4张图片

③ 优势
  • 可以进行统一的安全性检查(所有的请求都经过 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重写);
    • 处理效率会稍低。

该文是根据一个针对面试题的讲解的视频来写的,当然这只是我学到的一部分内容,还缺少很多很多,不过我当前的水平仅达到这个高度,如果有近期面试的小伙伴,可以到我的分类【PHP面试题】中看你需要的东西。如果有写的不合适的,请指正,谢谢给我提出建议的小伙伴!

你可能感兴趣的:(PHP面试题,PHP框架基础)