国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

自己動(dòng)手寫PHP框架(一)

B0B0 / 2696人閱讀

摘要:作者作為的入門進(jìn)階,自己動(dòng)手寫一個(gè)框架可以從各方面鞏固和加深你對的理解,還能了解一些架構(gòu)方面的基礎(chǔ)知識(shí)。它將程序劃分為三層。最上面的一層,是直接面向最終用戶的視圖層。最底下的一層,是核心的模型層,負(fù)責(zé)檢索組織和處理程序所需的數(shù)據(jù)或信息。

作者:Terry Gao

作為PHP Coder的入門進(jìn)階,自己動(dòng)手寫一個(gè)MVC框架可以從各方面鞏固和加深你對PHP的理解,還能了解一些架構(gòu)方面的基礎(chǔ)知識(shí)。

1. 什么是MVC

MVC(Model-View-Controller,模型-視圖-控制器)是PHP最常見的一種開發(fā)模式。它將程序劃分為三層。

最上面的一層,是直接面向最終用戶的"視圖層"(View)。它負(fù)責(zé)給用戶提供操作界面,是程序的外殼。

最底下的一層,是核心的"模型層"(Model),負(fù)責(zé)檢索、組織和處理程序所需的數(shù)據(jù)或信息。

中間的一層,就是"控制層"(Controller),它負(fù)責(zé)根據(jù)用戶從"視圖層"輸入的指令,選取"模型層"中的數(shù)據(jù),然后根據(jù)業(yè)務(wù)邏輯對其進(jìn)行相應(yīng)的操作,并產(chǎn)生最終結(jié)果。

2. 起步

文件結(jié)構(gòu)如下

www目錄將作為網(wǎng)站的根目錄,可以在Apache或Nginx的vhost配置中將www指定為Document Root,將核心代碼放在根目錄以外,使得用戶無法直接訪問到核心代碼,提高整站的安全性。

3. 入口

既然www是根目錄,那www下的index.php就可以作為整站的入口,當(dāng)然,你也可以在www下繼續(xù)寫usercenter.php、admin.php等來作為其它模塊的入口,你只需要制定規(guī)則就好。

而作為入口,由于它可以接收到發(fā)往它的所有數(shù)據(jù),因此可以按照框架制定的路由規(guī)則對數(shù)據(jù)進(jìn)行分發(fā)處理。因此,在入口,需要引入初始化程序,然后進(jìn)行路由分發(fā)。

/* Nova/www/index.php */

4. 初始化程序
/* Nova/Framework/init.php */
run();

初始化的過程涉及到了自動(dòng)加載類及Session的處理,這兩部分我們稍后介紹。先來說說核心處理程序,我把路由分發(fā)邏輯放在了這里。

5. 核心處理程序
/* Nova/Framework/Core.php */
setReporting();
        $this->route();
    }
    
    /**
     * 設(shè)定整站的錯(cuò)誤報(bào)告等級
     */
    public function setReporting()
    {
        if (DEBUG_MODE === true) {
            error_reporting(E_ALL);
            ini_set("display_errors", "On");
        } else {
            error_reporting(E_ALL);
            ini_set("display_errors", "Off");
            ini_set("log_errors", "On");
            ini_set("error_log", LOG_DIR . "error.log");
        }
    }

    /**
     * 路由規(guī)則
     *
     * 使用$_REQUEST["act"]來定位控制器的類
     * 使用$_REQUEST["st"]來定位具體的方法
     */
    public function route()
    {
        //如果$_REQUEST中沒有"act",則設(shè)定默認(rèn)act為index
        if (!isset($_REQUEST["act"])) {
            $_REQUEST["act"] = "index";
        }

        //如果$_REQUEST中沒有"st",則設(shè)定默認(rèn)act為main
        if (!isset($_REQUEST["st"])) {
            $_REQUEST["st"] = "main";
        }
        //根據(jù)act定位控制器類
        $className = "NovaApplicationControllers" . $_REQUEST["act"];
        //判斷控制器類是否存在,不存在則報(bào)404
        if (!class_exists($className)) {
            header("HTTP/1.1 404 Not Found");
            die($className);
        }

        //生成目標(biāo)控制器類對象
        $obj = new $className();

        //判斷方法是否存在,不存在則報(bào)404
        if (!method_exists($obj, $_REQUEST["st"])) {
            header("HTTP/1.1 404 Not Found");
            exit;
        }
        //執(zhí)行目標(biāo)方法
        $obj->$_REQUEST["st"]();
    }
}

你可以在Github上查看Nova項(xiàng)目的源代碼。

如果你有任何問題或建議,可以掃描下方二維碼或者微信搜索[phpjiagoushier],關(guān)注我的微信公眾號(hào)[PHP架構(gòu)],與我交流互動(dòng)。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/22555.html

相關(guān)文章

  • 自己動(dòng)手PHP框架(二)

    摘要:作者上一篇提到了類的自動(dòng)加載和,今天就來逐一說說。為這個(gè)問題提供了一個(gè)解決方案,這就是類的自動(dòng)裝載機(jī)制。為了方便使用自定義的全局,把方法也重寫了。 作者:Terry Gao 上一篇提到了類的自動(dòng)加載和Session,今天就來逐一說說。 1. 類的自動(dòng)加載 在使用PHP的OO模式開發(fā)系統(tǒng)時(shí),通常大家習(xí)慣將每個(gè)類的實(shí)現(xiàn)都存放在一個(gè)單獨(dú)的文件里,這樣會(huì)很容易實(shí)現(xiàn)對類進(jìn)行復(fù)用,同時(shí)將來維護(hù)時(shí)也...

    April 評論0 收藏0
  • 自己動(dòng)手PHP框架(三)

    摘要:假設(shè)我們站點(diǎn)的域名是,用戶請求地址。模型層我們可以將數(shù)據(jù)組織和處理邏輯放在模型層,這里封裝了數(shù)據(jù)庫操作,甚至有些大型的框架會(huì)在這一層對這個(gè)數(shù)據(jù)庫進(jìn)行對象化,目的都是為了組織和處理數(shù)據(jù),然后將處理好的數(shù)據(jù)返回給控制器層。 作者:Terry Gao 1. 控制器 第一篇我們聊到路由分發(fā)會(huì)把用戶請求按照規(guī)則分發(fā)到控制器層的不同類,而默認(rèn)的規(guī)則中,請求會(huì)下發(fā)到控制器的index類的main方法...

    Terry_Tai 評論0 收藏0
  • 創(chuàng)建自己的web應(yīng)用--記賬本()

    摘要:前記很早就想為自己寫一個(gè)東西,但是發(fā)現(xiàn)市面上的很多軟件其實(shí)遠(yuǎn)遠(yuǎn)的滿足了我的需求,這樣一來動(dòng)手創(chuàng)作的興致大大降低。說做就做,于是自己開始動(dòng)手策劃應(yīng)用的前端和后臺(tái)的各項(xiàng)事宜。 前記 很早就想為自己寫一個(gè)東西,但是發(fā)現(xiàn)市面上的很多軟件其實(shí)遠(yuǎn)遠(yuǎn)的滿足了我的需求,這樣一來動(dòng)手創(chuàng)作的興致大大降低。上周末去大潤發(fā)買點(diǎn)東西,回來記賬的時(shí)候發(fā)現(xiàn)手機(jī)上的記賬軟件很不舒服,對過往的數(shù)據(jù)沒有可視化的能力,于是...

    YacaToy 評論0 收藏0
  • 從零開始搭建論壇():Web服務(wù)器與Web框架

    摘要:服務(wù)器通過協(xié)議與客戶端通信,因此也被稱為服務(wù)器。本文標(biāo)題為從零開始搭建論壇一服務(wù)器與框架本文鏈接為更多閱讀自己動(dòng)手開發(fā)網(wǎng)絡(luò)服務(wù)器一自己動(dòng)手開發(fā)網(wǎng)絡(luò)服務(wù)器二自己動(dòng)手開發(fā)網(wǎng)絡(luò)服務(wù)器三服務(wù)器網(wǎng)關(guān)接口實(shí)現(xiàn)原理分析最佳實(shí)踐指南應(yīng)用淺談框架編程簡介 之前用 Django 做過一個(gè)小的站點(diǎn),感覺Django太過笨重,于是就準(zhǔn)備換一個(gè)比較輕量級的 Web 框架來玩玩。Web.py 作者已經(jīng)掛掉,項(xiàng)目好...

    dantezhao 評論0 收藏0
  • 個(gè)前端php博客系統(tǒng)--支持markdown哦

    摘要:部署的地址我的博客地址起因最近買了個(gè)新的域名,同時(shí)在阿里云申請了免費(fèi)的虛擬主機(jī)。。。一個(gè)前端寫的博客系統(tǒng)前臺(tái)展示后臺(tái)登錄一個(gè)前端寫的博客系統(tǒng)文章的修改和刪除 部署的地址 我的博客地址:http://www.weber.pub/ 起因 最近買了個(gè)新的域名,同時(shí)在阿里云申請了免費(fèi)的虛擬主機(jī)。。。借此機(jī)會(huì)就想搞個(gè)自己的博客站點(diǎn),雖然之前也使用了hexo + github 、 WordPres...

    wenhai.he 評論0 收藏0

發(fā)表評論

0條評論

B0B0

|高級講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<