從本篇開始介紹如何用php來實現mvc模式開發,而且後續的文章也是在這個基礎上不斷改造優化。關於mvc這裡就不多說了,並且在以後的文章裡也是以講技術為主。
本篇先介紹一下php的mvc實現原理,我們框架的mvc部分也是基於此原理實現的,但是今天的**並不是框架內的**,僅僅為說明原理。
一、檔案結構
建立3個資料夾
controller資料夾存放控制器檔案
view資料夾存放視**件
model資料夾存放資料檔案
建立1個index.php 作為唯一入口
二、控制器
我們在controller資料夾下建立乙個democontroller.php檔案,檔案內容如下
<?php
class democontroller
}/* 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
}/* end of file democontroller.php
*/再在瀏覽器中執行一下,看看是不是已經輸出了我們想要的內容了。
接著我們通過controller向view傳遞一些資料看看,**如下:
<?php
class democontroller
}/* end of file democontroller.php
*/view資料夾下index.php檔案**如下:
<?php
foreach ($data['list'] as $item)
?>
自己寫乙個框架
自己寫乙個框架 單入口mvc 類 庫 屬於擴充套件 乙個好的配置檔案和讀取功能 db介面 dispather.php index.php dispather 分析controller action 根據分析controller action 動態載入 引入乙個自動載入機制 controller.ph...
搭建自己的PHP框架心得(一)
說到寫php的mvc框架,大家想到的第乙個詞 造輪子 是的,乙個還沒有深厚功力的程式設計師,寫出的php框架肯定不如那些出自大神們之手 經過時間和各種專案考驗的框架。但我還是準備並且這麼做了,主要是因為 所以說,這次造輪子的目的不是為了造輪子而是為了在造輪子的過程中熟悉其工藝,總結輪子特點,更好的使...
搭建自己的PHP框架心得(一)
body blog calendar p,blockquote,ul,ol,dl,table,pre h1,h2,h3,h4,h5,h6 h1 tt,h1 code,h2 tt,h2 code,h3 tt,h3 code,h4 tt,h4 code,h5 tt,h5 code,h6 tt,h6 co...