PHP框架中MVC架構的分析(附範例)
這篇文章帶給大家的內容是關於PHP框架中MVC架構的分析(附範例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
在說 MVC 架構之前,先說說PHP框架。很多很多學完PHP語言的人,面對的就是PHP各種不同的框架。什麼TP啊、Yii啊、CI啊,還有很流行的laravel啊等等。
他們的大部分都會說自己是基於MVC 的架構,接著你得試著去理解MVC 的邏輯,並嘗試著用這樣的邏輯去建立一個網站,然後會說MVC 真香~
面試
很多PHP 的面試中,可能會問關於MVC 的問題,例如MVC 到底是什麼意思,怎麼理解這種架構。然而許多人的理解是 model 是模型,他對應著資料庫中的表結構;view 對應著頁面,用於展示;controller 主要用來寫各種邏輯,關聯資料和頁面的顯示。
以上答案基本上沒有問題,但一個網站的架構真的有那麼簡單麼?顯然不是
設計
在說之前,先讓我們來了解設計模式的一種:中介者模式。一個圖像的理解就是:港行插頭和國行插頭的轉接頭。
在 MVC 架構中 controller 就是這個轉接頭。它只負責把 model 中的資料轉接給 view,對於訪客來說,他們是看不到 model 中保存的真實資料的。從另一個角度來說,這種中介者模式可以很好的將兩層資料進行友善的溝通。
爬坑
這種模式真的那麼好麼?隨著業務邏輯的越來越複雜,會發現 controller 中的程式碼越來越多,甚至連自己都不願意去調整和優化冗餘程式碼。
但從宏觀來說,網站無非是請求多一些,表單多一些,頁面多一些啊,其他也沒什麼了,為什麼會這樣呢?
沒錯,就是因為這樣或那樣的東西比較多,導致 controller 中每個方法都很長,那麼能想到的解決方法就是拆分。
如果用過yii 框架,那麼你會知道最簡單的辦法就是加一個請求form層,程式碼如下:
class AuthController { public function login() { $FLogin = new loginForm(); $FLogin->save(); } } // 一般在独立的文件夹中 class loginForm { public function __construct() { $post = $_POST; } public function save() { } }
以上的就是解決controller 中form 表單的問題,這個問題基本上能緩解很多程式碼問題。
發散
從解決 form 層來看,其實有很多類似的問題可以解決。我們知道前端有個叫做 vue.js 的框架,它裡面提到一個概念叫做 MVVM 模型。
其實在展現複雜頁面的時候,後端在對外輸出資料時,完全也可以採用這玩意進行資料輸出。至於如何建立這樣的一個模型,那就具體得看業務邏輯了。
這裡簡單拿用戶中心舉個例子,因為往往這裡不只需要一個表格的資料:
class AuthController { public function userCenterAction() { return new userVM(); } } class userVM { public $user; public $orders; public $other; public function __construct() { $this->user = $this->getUser(); $this->orders = $this->getOrders(); $this->handle(); } private function getUser() { return NULL; } private function getOrders() { return NULL; } private function handle() { } }
以上程式碼中,有個VM 層,可以將相關取得資料的程式碼放在各自的方法中,然後在handle 方法中自由組合。這樣在 controller 中的程式碼也非常方便管理。
再想想,有沒有可以封裝的其他層呢?其實是有的,例如 request 層,還有經常被框架封裝好的 validate 層,還有 laravel 中比較流行的 Middleware 層等等。只能說系統越複雜,層越多。
每個複雜系統的背後都蘊含著資深開發工程師和架構師的設計想法。以上說那麼多,不知道讀者能否理解這些東西,就拿以上程式碼來說,裡面就蘊含著另一種設計模式:建造者模式。
總結
程式碼寫多了,也就知道其中蘊含的道理了。當一個新框架誕生後,焦點從學習這個框架,慢慢變成了這個框架是如何設計的,解決什麼樣的問題。哪些地方用了比較好的技術和方法,從中能收穫到什麼。有些地方的設計想法是什麼樣的,有麼有更好的設計,為何我能想到,對方想不到呢,是不是我遺漏了什麼。
前幾年使用過各種 PHP 框架,小到 CI,大到 Symfony。不用那麼多框架,也體會不到這些東西。學習程式設計其實跟英文一樣,沒什麼捷徑可以走。
多寫,多想,多練......
#以上是PHP框架中MVC架構的分析(附範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。
