搭建自己的PHP框架

2021-06-28 22:03:07 字數 3335 閱讀 7520

現在web應用普遍使用的是mvc設計模式,即模型(model)、檢視(view)和控制器(controller)

搭建框架首先要明白三者的聯絡,我們可以設計乙個單入口檔案模式,具體流程是

index.php->獲取引數得到controller控制器名,method方法名,param引數->構造控制器->構造相應的檢視、模型->呼叫相應的方法

具體步驟

在controllers目錄下建立controller.class.php、indexcontroller.class.php ,控制器檔案格式名為***xcontroller.class.php,controller是所有控制類的基類

在templates目錄下建立template.class.php檔案,具體作用稍後再說

在models目錄下建立乙個處理資料庫的類database,這個類新增對資料庫的鏈結訪問,已經常用的增刪改查,然後還在該目錄下建立model.class.php類 來繼承database

在libray目錄下建立shared.php檔案,common.php檔案,common主要放置自定義的全域性函式

config下建立config.php檔案,其中主要是資料庫和專案的配置

2、在yhphp根目錄下建立index.php入口檔案,具體內容如下

<?php

define('ds',directory_separator);

define('root',dirname(__file__));

require_once(root.ds.'config'.ds.'config.php');

require_once(root.ds.'library'.ds.'shared.php');

?>

3、開啟第一步建立的shared.php檔案,錄入以下**

<?php

require_once(root.ds."library".ds."common.php");

//類魔術函式

function __autoload($classname)else if(file_exists($classpath_temp))else if(file_exists($classpath_model))else

} function main() else

}main();

main函式作用是得到url中的控制器名、方法名、已經引數,url形如localhost/index.php?c=index&m=hello&name=wei

然後使用$dispatch = new $control($cname,$method); 出乙個物件例項,這一步看起來非常奇怪,我們沒有include類的路徑,怎麼就可以建立物件呢?

大家仔細看前面還有個__autoload方法,這個方法會在你例項化物件之前自動載入指定的檔案,也就是說在實力物件前,會呼叫__autoload方法,引數就是類的名稱,在__autoload中把類包含進來就可以了

然後使用method_exists函式檢視類中是否存在該方法,如果存在呼叫這個方法。

4、然後開啟控制器的基類controller.class.php,錄入以下**

<?php

class controller

//設定view變數

function setvar($name,$value)

function __destruct()

}

該類在構造的時候有建立了乙個template、model的例項,然後在析構中呼叫template類的render方法,載入對應的模板

5、開啟template.class.php檔案錄入以下**

<?php

class template

function setvar($name,$value)

function render()else

}}

templates目錄cname目錄下的method.php檔案,也就是說在templates目錄下建立控制器名為子目錄,方法名為檔案的view檢視

這樣檢視和控制層我們已經完成,涉及到對資料庫的操作,我們可以像tp那樣定義乙個全域性函式m來訪問資料庫,在commone.php中新增乙個m函式

<?php

function m($name)

開啟database類,新增對資料庫的常用操作

<?php

class databaseelse

}else

}/** 中斷資料庫連線 **/

function disconnect() else

}/** 查詢所有資料表內容 **/

function selectall()

/** 查詢資料表指定列內容 **/

function select($id)

/** 自定義sql查詢語句 **/

function query($query, $singleresult = 0)

while ($row = mysql_fetch_row($this->_result))

if ($singleresult == 1)

array_push($result,$tempresults);

}mysql_free_result($this->_result);

return($result);}}

/** 返回結果集行數 **/

function getnumrows()

/** 釋放結果集記憶體 **/

function freeresult()

/** 返回mysql操作錯誤資訊 **/

function geterror()

}

新增model類繼承database類

<?php

class model extends database

function __destruct()

}

這樣mvc的雛形基本完成了,接下來我們來測試一下,我們可以建立乙個indexcontroller控制器類,然後在templates下 建立乙個index目錄和index.php檔案

建立乙個資料庫,建立乙個user表,我們用indexcontroller來查詢表

<?php

class indexcontroller extends controller

}

想要php和html分離,我們可以使用smarty框架,可以參考

這篇文章整合

PHP搭建自己的MVC框架 2

mvc工作流程初步認識 第一步 訪問者 呼叫控制器 發出指令 第二步 控制器 按指令選取合適的模型 第三步 模型 安控制器發出的指令獲取相應的資料 第四步 控制器 按照指令選取相應的檢視 第五步 檢視 將第三步渠道的資料通過控制器傳遞給檢視資料按使用者想要的樣子展示出來 1 首先我們需要有乙個入口檔...

搭建自己的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...