1. 程式人生 > >【PHP常見面試題 PHP框架基礎-MVC框架基本工作原理】談談你對MVC的認識,介紹幾種目前比較流行的MVC框架。

【PHP常見面試題 PHP框架基礎-MVC框架基本工作原理】談談你對MVC的認識,介紹幾種目前比較流行的MVC框架。

一、考點

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、常見MVC框架

MVC框架

  • ThinkPHP
  • Yii2
    • 請求時使用 index.php?r=site/index,代表請求 site模組(即 控制器)中的 index方法
    • 請求 index.php?r=user/reg,表示使用者模組下的註冊操作,用 C層 呼叫 V層
    • user/doreg 中處理,將資料存入 M層
    • M層 去呼叫 DB

在這裡插入圖片描述

  • CI
  • Yaf
  • Phalcon等

3、延伸

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重寫);
    • 處理效率會稍低。