PHP MVC實例,是一種軟件架構模式,即Model-View-Controller,將軟件應用分離為三個部分,有利于維護、測試和擴展。本文將以簡單且常見的注冊登錄功能為例,介紹如何使用PHP MVC實現。
首先,我們需要創建一個文件夾,命名為“demo”,其中包含三個子文件夾“model”、“view”和“controller”,這三個子文件夾是分別表示M、V、C三個部分。接著我們創建注冊頁面,代碼如下:
<html> <head> <title>注冊</title> </head> <body> <form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>"> 用戶名: <input type="text" name="username" required><br/> 密碼: <input type="password" name="password" required><br/> 重復密碼: <input type="password" name="password2" required><br/> <input type="submit" name="submit" value="注冊"> </form> </body> </html>這是視圖V部分的代碼,它負責用戶界面和輸入數據的表示。之后我們要進行數據的驗證和存儲,這就是控制器C的作用了,代碼如下:
<?php require_once('model/UserModel.php'); if(isset($_POST['submit'])){ $username = trim($_POST['username']); $password = trim($_POST['password']); $password2 = trim($_POST['password2']); //數據驗證 if($password!=$password2){ echo "兩次輸入密碼不一致!"; }else{ if(!preg_match('/^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/',$username)){ echo "請輸入正確的郵箱!"; }else{ //數據儲存 $model = new UserModel(); $username = $model->escapeString($username); $password = $model->encrypt($model->escapeString($password)); $registerTime = date('Y-m-d H:i:s'); if($model->isExist($username)){ echo "該用戶名已經被注冊!"; }else{ if($model->addUser($username,$password,$registerTime)){ echo "注冊成功!"; }else{ echo "注冊失敗!"; } } } } } ?>在控制器C部分,我們需要加載并實例化模型M的類,這里我們引入了UserModel.php文件。之后是數據驗證和儲存過程,包括驗證兩次輸入的密碼是否一致,郵箱格式是否正確,用戶名是否已經被注冊,以及數據儲存的過程。 以上代碼中用到了一個模型M中的類UserModel,這里介紹一下模型M的部分代碼:
<?php class UserModel{ private $db; public function __construct(){ $this->db = new PDO('mysql:host=your-host;dbname=your-dbname','username','password'); } public function isExist($username){ $stmt = $this->db->prepare('SELECT * FROM `user` WHERE `username`=:username'); $stmt->bindParam(':username',$username); $stmt->execute(); return $stmt->rowCount()>0; } public function addUser($username,$password,$registerTime){ $stmt = $this->db->prepare('INSERT INTO `user` (`username`,`password`,`register_date`) VALUES(:username,:password,:register_date)'); $stmt->bindParam(':username',$username); $stmt->bindParam(':password',$password); $stmt->bindParam(':register_date',$registerTime); return $stmt->execute(); } public function encrypt($password){ return md5($password); } public function escapeString($string){ return $this->db->quote($string); } } ?>這個模型類中包含了新增用戶、查詢用戶是否存在、加密密碼和轉義字符的方法。當遇到特殊字符或SQL注入時,轉義字符是非常重要的一步,這里我們使用PDO中的quote方法,比較方便而且安全。 最后,我們把所有部分串聯起來,這就是一個完整的PHP MVC模式的實例。通過對不同的部分進行抽象和分離,我們可以大大降低這個應用的代碼復雜度,便于后期的項目維護和功能擴展。