1. 程式人生 > >PHP實現MVC開發得最簡單的方法——單點入口

PHP實現MVC開發得最簡單的方法——單點入口

  很早前就想寫一些關於PHP實現MVC的新的體會。今天就開始詳細的寫寫我對MVC的一些理解,以及我在開發過程中實現自己的一個框架的一個流程。其中或許說的不正確,還望指正!

    網站關於MVC的教材很多了,我這裡不具體說了,不明白的,推薦自己上百度搜索下“MVC",相信可以找到你想要的東西的。這裡我談談在PHP實際開發中,我對MVC的理解。M,module,主要任務是把資料庫或者其他檔案系統的資料按照我們需要的方式讀取出來。V,view,我的理解是主要負責頁面的先是,把資料以html的形式顯示給使用者。C,controller,主要負責業務邏輯,比如說你要顯示登陸介面,就需要呼叫一個控制器userController的方法loginAction來顯示(可能這個不需要呼叫module),再比如你進行登陸檢查就可以呼叫userController的方法checkAction來進行邏輯處理。(感覺Verdana的指正^_^)。

M是指model。Controller 並不參與業務邏輯,整個業務邏輯部分應該是放在 Model 層中的。Controller 只起到分發請求的作用,也就是說得到當前的 Request,決定呼叫哪個 Model 獲取資料,然後再賦值給哪個 View 來渲染頁面


   具體實現MVC,我覺得最好還是要做到單點入口。
   什麼是單點入口呢?所謂單點入口就是整個應用程式只有一個入口,所有的實現都通過這個入口來轉發,比如說在上面我們就使用index.php作為程式的單點入口,當然這個是可以由你自己任意控制的。
   為什麼要做到單點入口呢?單點入口有幾大好處:第一、一些系統全域性處理的變數,類,方法都可以在這裡進行處理。比如說你要對資料進行初步的過濾,你要模擬session處理,你要定義一些全域性變數,甚至你要註冊一些物件或者變數到註冊器裡面(主要是實現在全域性,具體你可以參考我先前翻譯的一些文章
《在PHP中使用全域性變數》
)。第二、程式的架構更加清晰明瞭。當然好處還有很多的,我也不一一列舉了,具體你可以去體會。
   當然單點入口也存在一些不足,比如你係統大了後,不可能只一個點做為入口,尤其系統存在兩個完全不相關的功能時候,不過很高興的說,這個是可以擴充套件,你可以擴充套件多個入口。比如說在最近一個大專案中,後臺的管理和前臺是不相關的,所以我就會有兩個入口,一個是index.php一個是admin.php。但這不不是說單點入口不好(具體含義你可以揣摩下)。
   那麼,如何實現單點入口呢?這是我本節的重點。一般來說都是通過url的地址對映實現的(前面我有一篇文章說到這個:《回答PHPCHINA上的幾個問題:URL對映》
,裡面實現了單點入口的核心,這裡我具體實現,並演示下)。單點入口最關鍵的就是通過url傳遞引數來實現程式的分配,具體說,比如:地址是index.php?controller=test&action=test,這就通過index.php把請求轉發到對應的testController檔案中,並執行其對應的testAction方法(這裡的控制器和方法的命名都參考了Zend Framework的思想)。
   下面我們用最簡單的方法是來實現上面說的單點入口(記住:簡單起見,我這裡沒有使用URL映射了)
    /index.php

<?
/**
  * MVC演示demo
  * 僅僅實現最基本的MVC功能,不包含安全處理,資料過濾,及其他優化措施。
  * @author:feifengxlq
  * @since:2007-1-10
  * @copyright http://www.phpobject.net/blog/read.php/95.htm
*/
define('SITE_PATH',str_replace('','/',dirname(__FILE__)));//定義系統目錄

$controller=(!empty($_GET['controller']))?$_GET['controller']:'index';//獲取控制器,預設index
$action=(!empty($_GET['action']))?$_GET['action']:'index';//方法名稱,預設index

$controller_name=$controller.'Controller';
$controller_file=SITE_PATH.'/app/controller/'.$controller_name.'.class.php';//獲取控制器檔案
if(file_exists($controller_file)){
    require_once(
$controller_file);
    
$controller=new $controller_name();
    
$controller->{$action.'Action'}();
}else{
    die(
'找不到對應的控制器!');
}
?>


對應的一個演示demo
/app/controller/testController.class.php(注意路徑)

<?
/**
  * MVC演示demo
  * 僅僅實現最基本的MVC功能,不包含安全處理,資料過濾,及其他優化措施。
  * @author:feifengxlq
  * @since:2007-1-10
  * @copyright http://www.phpobject.net/blog/read.php/95.htm
*/
class testController
{
    function 
testAction(){
        echo 
'Hello,World!';
    }
}
?>


開啟瀏覽器,輸入http://path/to/yoursite/index.php?controller=test&action=test(注意相應的修改你的路徑),如果你看到Hello,World!說明MVC第一步,單點入口成功了!

   提供演示demo下載:
下載地址:http://www.yanxue8.com/?file_568

相關推薦

PHP實現MVC開發簡單方法——入口

  很早前就想寫一些關於PHP實現MVC的新的體會。今天就開始詳細的寫寫我對MVC的一些理解,以及我在開發過程中實現自己的一個框架的一個流程。其中或許說的不正確,還望指正!    網站關於MVC的教材很多了,我這裡不具體說了,不明白的,推薦自己上百度搜索下“MVC",相信

PHP生成靜態HTML頁面簡單方法示例

PHP檔名:dome.php <?php $string = 1; ob_start(); @readfile("templets/list.html"); $text = ob_get_flush(); $m

解決webupload在同一頁面實現多個的簡單方法

另外新建一個html頁面,用iframe標籤引進原頁面如:<iframe src="shop_list_upload2.html" width="100%" height="400"></iframe>這樣就可以實現同一頁面實現多個webupload的

PHP分頁初探 一個簡單PHP分頁代碼的簡單實現

too 查詢 use img 多少 contain 網站 實現 ice PHP分頁代碼在各種程序開發中都是必須要用到的,在網站開發中更是必選的一項。 要想寫出分頁代碼,首先你要理解SQL查詢語句:select * from goods limit 2,7。PHP分頁代碼核心

使用esp8266實現STM32聯網(簡單USART方法

上一篇 esp8266怎麼配置 esp8266和USB轉TTL連線 esp8266簡單介紹 esp8266連線路由器 esp8266通過路由器連線在同一區域網中的電腦,建立TCP連線 esp8266使用串列埠傳送資料到電腦上的網路除錯助手 esp826

簡單的Ajax實現方法

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="article_view.aspx.cs" Inherits="Article_article_view" %> <!DOCTYPE htm

【IOS】簡單方法實現Cell文字高度自適應.

本教程適合新手. 系統:IOS7之後. 純文字高度. 血的教訓: 相信大家曾經為了實現cell的高度自適應,肯定少苦。那個時候,我是在我的資料模型model中新增一個height屬性,實現它的get方法,在get方法中計算需要多行顯示文字的高度,然後再加上其他亂七八糟的高度並返回,然

esp8266實現STM32聯網(簡單USART方法

上一篇 esp8266怎麼配置 esp8266和USB轉TTL連線 esp8266簡單介紹 esp8266連線路由器 esp8266通過路由器連線在同一區域網中的電腦,建立TCP連線 esp8266使用串列埠傳送資料到電腦上的網路除錯助手 esp8266使用串列

簡單方法:windows平臺下python安裝opencv,即實現import cv2功能

之前用的下面舊方法裝好了opencv,重灌系統後按照原來的方法重灌了下opencv,結果一直報錯: ImportError: Module use of python27.dll conflicts

[Unity3D]Unity3D遊戲開發之史上簡單的滑鼠選控制人物走動實現

      今天呢,我們來一起實現一個在RPG中游戲中十分常見的功能,通過滑鼠點選螢幕來控制人物的走動。首先來說一下原理,當我們點選螢幕時,我們按照一定的方法,將螢幕上的二維座標轉化為三維座標,然後

Visual Studio Code 配置Go 開發環境簡單方法!!!

lang 方法 導致 分享圖片 src info 國內 golang 失敗 由於大家都知道的原因,在國內如果想訪問go等各種資源,都會遇到某種不可預知的神奇問題。導致在VS Code中安裝 go 各種插件都會失敗。 於是乎,網上就出現了各種各樣的解決方案:什麽手動git

Java對數組的操作(三)—比較兩個數組中的元素是否同樣的簡單方法

con data println test popu pan equal main spa 呵呵呵,實現Java比較兩個數組中的元素是否同樣的功能你是怎麽做的?看以下最簡單方法: import java.util.Arrays;

神級Java程序員 開車教你基礎開發簡單 微型Java Web框架

padding ont 目的 簡單 json 破解 apach java學習 web 介紹: 它是Java中的開放源代碼(Apache License)微型Web框架,具有最小的依賴性和快速的學習曲線。 該項目的目標是在Java中創建一個易於使用和破解的微型Web框架。

【轉】使用git將項目上傳到github(簡單方法

名稱 posit gitignore nor this strong 共享 window mas 原文地址:http://www.cnblogs.com/cxk1995/p/5800196.html 首先你需要一個github賬號,所有還沒有的話先去註冊吧! https:/

詳解PHP實現定時任務的五種方法

清理 toolbar 路徑 頁面 文檔 errors conf star 包含 定時運行任務對於一個網站來說,是一個比較重要的任務,比如定時發布文檔,定時清理垃圾信息等,現在的網站大多數都是采用PHP動態語言開發的,而對於PHP的實現決定了它沒有Java和.Net這種A

揭幕黑客軟件:如何盜別人的微信號密碼簡單方法及怎麽盜取微信密碼?

是我 之間 將他 微信 但是 因此 ima 信任 是不是 說真的作為一個白領,在生活中我有著一份不錯的工作,和老公是大學談戀愛的,四年之後,我們正式工作了,便順其自然的結婚。但是結婚之後,總是會擔心自己的老公會在外邊找其它的人,因此特別想要更好的了解對方。但是由於工作十分的

揭曉黑客步驟:盜微信號密碼簡單方法與軟件以及怎麽盜取微信密碼?

數字 讓其 方法 現在 防範 mage 最簡 不容易 快捷 揭曉黑客步驟:盜微信號密碼最簡單方法與軟件以及怎麽盜取微信密碼? 隨著信息時代的來臨,很多人使用上了微信,微信的出現使得人們的生活變的十便利。人們不僅在工作中使用它,在社交中也讓其發揮了重要的作用。微信現在已經漸漸

使用git將專案上傳到github(簡單方法) - 轉

方法如下 https://www.cnblogs.com/cxk1995/p/5800196.html   唯一需要注意的地方: 紅線框起來的地方,一定要改成"first commit"   或者其他內容,例如 git commit  

C 建立快捷方式的簡單方法

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

anaconda+pycharm配置tensorflow-GPU環境簡單方法

2018年開始學習tensorflow框架。買了塊顯示卡1060 6G。裝上了原生的ubuntu16.04。從安裝顯示卡驅動到cuda和cudnn。無奈配置tensorflow環境一直報錯。之後轉回windows系統。試著繼續用網上說的命令列配置,還查了tensorflow的官方文件。還是報錯。