1. 程式人生 > >打造自己php的開發框架--php的MVC簡單實現

打造自己php的開發框架--php的MVC簡單實現

從本篇開始介紹如何用php來實現MVC模式開發,而且後續的文章也是在這個基礎上不斷改造優化。關於MVC這裡就不多說了,並且在以後的文章裡也是以講技術為主。

    本篇先介紹一下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>