PHP MVC思想,指的是利用M(Model,模型)、V(View,視圖)、C(Controller,控制器)分層架構的設計思想來組織Web開發的程序。這種設計思想將所有的數據、業務邏輯和顯示界面分離,防止代碼混亂、重復和難于維護。下面將以實例來詳細說明如何運用PHP MVC思想進行Web開發。
在實際開發中,我們通常使用框架來進行MVC開發。以Laravel框架為例,我們先創建一個UserController來控制用戶相關的所有操作(增刪改查)。在該控制器中,我們可以直接調用User模型中的方法對用戶進行操作,如下所示:
class UserController extends Controller { public function index() { $users = User::all(); return view('user.index', ['users' =>$users]); } public function create() { return view('user.create'); } public function store(Request $request) { User::create($request->all()); return redirect()->route('user.index'); } public function show($id) { $user = User::find($id); return view('user.show', ['user' =>$user]); } public function edit($id) { $user = User::find($id); return view('user.edit', ['user' =>$user]); } public function update(Request $request, $id) { $user = User::find($id); $user->update($request->all()); return redirect()->route('user.index'); } public function destroy($id) { $user = User::find($id); $user->delete(); return redirect()->route('user.index'); } }
如上代碼所示,我們創建了一個UserController類,并在該類中實現了7個方法,分別處理用戶的各種操作。例如,index()方法中我們查詢了所有用戶的數據并返回了一個帶有users數據的視圖,而store()方法中我們接收用戶提交的數據并使用User模型中的create()方法將數據插入到數據庫中。同樣的,其他方法也都是類似操作。
為了讓上面所講的代碼更加具有說服力,下面我們再來看一下使用PHP MVC思想與不使用的對比。首先,我們看一下不使用MVC思想的代碼:
class UserController { public function index() { $db = new DB(); $result = $db->select('SELECT * FROM users'); $html = '
'.$row['id'].' | '; $html .= ''.$row['name'].' | '; $html .= ''.$row['email'].' | '; $html .= '
'.$row['id'].' | '; $html .= ''.$row['name'].' | '; $html .= ''.$row['email'].' | '; $html .= '
如上代碼所示,在沒有使用MVC思想的情況下,我們需要在UserController中實現完整的數據讀寫和頁面渲染等操作。代碼中既有與數據相關的業務邏輯也有與顯示相關的代碼,耦合程度非常高,且十分難以維護。
相對而言,如果使用了MVC思想,我們可以將這些職責分別放在模型、視圖和控制器中,代碼相互隔離、獨立,易于維護。例如:
//Model class UserModel extends Model { protected $table = 'users'; } //View <!-- resources/views/index.blade.php --> <table> <thead> <tr> <th>ID</th> <th>Name</th> <th>Email</th> </tr> </thead> <tbody> @foreach ($users as $user) <tr> <td>{{ $user->id }}</td> <td>{{ $user->name }}</td> <td>{{ $user->email }}</td> </tr> @endforeach </tbody> </table> //Controller class UserController extends Controller { public function index() { $users = UserModel::all(); return view('index', compact('users')); } }
使用MVC思想之后,我們的代碼更加清晰和易于理解。例如修改代碼中的顯示內容,只需改變視圖層(index.blade.php),而不用關心數據操作和控制器內容。如果需要修改查詢語句或其他數據操作,也只需更改模型層(UserModel),而不影響其他部分。
在實際項目中,除了Laravel框架之外還有很多優秀的PHP框架,例如ThinkPHP、CodeIgniter等都是MVC思想的典型代表。無論使用哪種框架,我們都應該堅持使用MVC思想進行開發,這樣可以有效提高代碼質量,防止代碼混亂,并且減輕后期維護的難度。