PHP——MVC模式講解與範例

2020-07-16 10:05:46
一、 MVC模式流程圖

20190321174858211.png

二、MVC概念

(1)作用

MVC包括控制器(Controller),模型(Model),檢視(View)。

控制器的作用是呼叫模型和 檢視,將模型產生的資料傳遞給檢視,並讓檢視去顯示

模型的作用是獲取資料並處理返回資料

檢視的作用是將取得的資料進行美化,並向使用者終端輸出

(2)執行過程

1. 瀏覽者 -> 呼叫控制器,發出指令

2. 控制器 -> 按指令選擇合適的模型

3. 模型 -> 按指令取資料

4. 控制器 -> 按指令選檢視

5 . 檢視 -> 把取到的資料展示出來

三、簡單的MVC範例

(1)目錄規劃

20190321200614451.png

(2)編寫類檔案
1. testController.class.php 控制器類檔案

命名規則:test(名字)Controller(控制器檔案).class.php ( 類檔案 )

<!-- 
 首先範例化控制器物件,並呼叫指令方法,
 方法裡面範例化模型物件,呼叫取資料方法
 併範例化檢視物件,呼叫展示方法
  -->
  <!-- 
 控制器的方法沒有引數,而其他的就有引數
   -->
<?php
    // 類名和檔名相同 
    class testController{
        function show(){
            
            $testModel = new testModel();//按指令選擇一個模型
            $data = $testModel -> get();//模型按照指令取資料
            //按指令選擇檢視 範例化一個view的物件
            $testView  = new testView();
            //把取到的資料按使用者的樣子顯示出來
            $testView -> display($data);
        }
    }
?>

2. testModel.class.php 模型類檔案
命名規則:test(模型檔名稱 )Model( 模型檔案).class.php 類檔案

<?php 
    class testModel{
        //獲取資料
        function get(){
            return "hello world";
        }
    }
?>

3. testView.class.php 檢視類檔案

<?php 
    class testView{
        //展示資料
        function display($data){
            echo $data;
        }
    }
?>

4. 單一入口檔案

讓他來呼叫控制器,而控制器去呼叫模型和檢視

<?php
//引入類檔案
require_once('/libs/Controller/testController.class.php');
require_once('/libs/Model/testModel.class.php');
require_once('/libs/View/testView.class.php');
 
//類的範例化
$testController = new testController();//物件賦值給變數
$testController->show();//呼叫方法
?>

5.執行結果

20190321202052335.png

四、簡單的MVC範例改進----方法封裝

1. 封裝一個範例化控制器等的物件和呼叫方法的函數

<?php
 
    //控制器名字和要執行的方法
    function C($name,$method){
        require_once('/libs/Controller/'.$name.'Controller.class.php');
        //物件賦值給變數
        // $testController = new testController();
        // $testController->show();
        eval('$obj = new '.$name.'Controller();$obj->'.$method.'();');//把字串轉換為可執行的php語句
    }
    //封裝一個範例化模型的物件和呼叫方法的函數
    function M($name){
        require_once('/libs/Model/'.$name.'Model.class.php');
        //$testModel = new testModel();
        eval('$obj = new '.$name.'Model();');//範例化
        return $obj;
    }
 
    //封裝一個範例化檢視的物件和呼叫方法的函數
    function V($name){
        require_once('/libs/View/'.$name.'View.class.php');
            //$testView  = new testView();
            eval('$obj = new '.$name.'View();');
            return $obj;
    }
 
    //為了安全性 ,過濾函數
    //addslashes對’,字元進行跳脫
    //get_magic_quotes_gpc()當前魔法符號的開啟狀態,開啟返回true,
    function daddslashes($str){
        return (!get_magic_quotes_gpc() )? addslashes($str) : $str;
    }
?>

2.重新編寫入口檔案index.php

瀏覽器url存取形式 http://......index.php?controller=控制器名&method=方法名

<?php 
require_once('function.php');
 
//允許存取的控制器名和方法名的陣列
$controllerAllow=array('test','index');
$methodAllow =array('test','index','show');
//用get方式接收url中的引數
//過濾輸入非法字元  並判斷是否在陣列裡
$controller = in_array($_GET['controller'],$controllerAllow )? daddslashes($_GET['controller']) :'index' ;
$method = in_array($_GET['method'],$methodAllow) ? daddslashes($_GET['method']) :'index';
//呼叫控制器和執行方法
C($controller,$method);
 
?>

3.執行結果

瀏覽器存取 http://localhost:8080/MVC/index.php?controller=test&method=show 顯示hello world

20190321202550341.png

想了解更多PHP相關問題請存取PHP中文網:PHP視訊教學

以上就是PHP——MVC模式講解與範例的詳細內容,更多請關注TW511.COM其它相關文章!