程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP的MVC框架 深入解析

PHP的MVC框架 深入解析

編輯:關於PHP編程

     本篇先介紹一下php的MVC實現原理,我們框架的MVC部分也是基於此原理實現的,但是今天的代碼並不是框架內的代碼,僅僅為說明原理

     

      一、文件結構

      建立3個文件夾

      controller文件夾存放控制器文件

      view文件夾存放視圖文件

      model文件夾存放數據文件

      建立1個index.php 作為唯一入口

     

      二、控制器

      我們在controller文件夾下建立一個democontroller.php文件,文件內容如下

      <?php

      class DemoController

      {

      function index()

      {

      echo('hello world');

      }

      }

      /* End of file democontroller.php */

      這個文件裡面我們只是建立了一個名為DemoController的對象並包含一個index的方法,該方法輸出hello world。下面在index.php中執行DemoController中index方法。

     

      index.php的代碼如下

      <?php

      require('controller/democontroller.php');

      $controller=new DemoController();

      $controller->index();

      /* End of file index.php */

     

      運行index.php,ok如願我們看到了我們久違的hello world。這兩個文件非常簡單,但也揭示了一點點mvc的本質,通過唯一入口運行我們要運行的控制器。當然controller部分應該是由uri來決定的,那麼我們來改寫一下index.php使他能通過uri來決定運行那個controller。

      index.php改寫代碼如下:

      <?php

      $c_str=$_GET['c'];

      //獲取要運行的controller

      $c_name=$c_str.'Controller';

      //按照約定url中獲取的controller名字不包含Controller,此處補齊。

      $c_path='controller/'.$c_name.'.php';

      //按照約定controller文件要建立在controller文件夾下,類名要與文件名相同,且文件名要全部小寫。

      $method=$_GET['a'];

      //獲取要運行的action

      require($c_path);

      //加載controller文件

      $controller=new $c_name;

      //實例化controller文件

      $controller->$method();

      //運行該實例下的action

      /* End of file index.php */

      在浏覽器中輸入http://localhost/index.php?c=demo&a=index,得到了我們的hello world。當然如果我們有其他的controller並且要運行它,只要修改url參數中的c和a的值就可以了。

      這裡有幾個問題要說明一下。

      一、php是動態語言,我們直接可以通過字符串new出我們想要的對象和運行我們想要的方法,即上面的new $c_name,我們可以理解成new 'DemoController',因為$c_name本身的值就是'DemoController',當然直接new 'DemoController'這麼寫是不行的,其中的'DemoController'字符串必須通過一個變量來中轉一下。方法也是一樣的。

     

      二、我們在url中c的值是demo,也就是說$c_name 的值應該是demoController呀,php不是區分大小寫嗎,這樣也能運行嗎?php區分大小寫這句話不完整,在php中只有變量(前面帶$的)和常量(define定義的)是區分大小寫的,而類名方,法名甚至一些關鍵字都是不區分大小寫的。而true,false,null等只能全部大寫或全部小寫。當然我們最好在實際編碼過程中區分大小寫。

     

      三、視圖

      我們在前面的controller中只是輸出了一個“hello world”,並沒有達到mvc的效果,下面我將在此基礎上增加視圖功能,相信到這裡大家基本已經能想到如何添加視圖功能了。對,就是通過萬惡的require或者include來實現。

      首先我們在view文件夾下建立一個index.php,隨便寫點什麼(呵呵,我寫的還是hello world)。之後我們改寫一下我們之前的DemoController。代碼如下:

      <?php

      class DemoController

      {

      function index()

      {

      require('view/index.php');

      }

      }

      /* End of file democontroller.php */

      再在浏覽器中運行一下,看看是不是已經輸出了我們想要的內容了。

      接著我們通過controller向view傳遞一些數據看看,代碼如下:

      <?php

      class DemoController

      {

      function index()

      {

      $data['title']='First Title';

      $data['list']=array('A','B','C','D');

      require('view/index.php');

      }

      }

      /* End of file democontroller.php */

      view文件夾下index.php文件代碼如下:

      <html>

      <head>

      <title>demo</title>

      </head>

      <body>

      <h1><?php echo $data['title'];?></h1>

      <?php

      foreach ($data['list'] as $item)

      {

      echo $item.'<br>';

      }

      ?>

      </body>

      </html>

      最後 MVC就是 Model View Controller 模型 視圖 控制器

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved