站長資訊網
        最全最豐富的資訊網站

        如何用PHP搭建自己的web框架?

        本篇文章給大家一分鐘學會如何用PHP搭建自己的web框架?(分享)有一定的參考價值,有需要的朋友可以參考一下,希望對大家有所幫助。

        如何用PHP搭建自己的web框架?

        這里講的WEB是指運行在apache下的PHP WEB程序。

        首先要理解PHP在apache下的運行機制和請求的生命周期。

        PHP是腳本語言,它的執行過程就是從文件入口,一直到文件的最后的結尾,其中可以包含或引用其它文件,是面向過程的。在過程當中,可以使用對象來實現各種需要的邏輯處理。你可以把一個或者多個對象拿來完成所需要的功能,你也可以告訴一個對象你要完成什么功能,這是面向對象的開發方法,也是普遍的開發方法。所以,在面向過程的運行機制中,使用面向對象的開發方式。

        每一個HTTP請求的生命周期也是從入口開始,直到程序結束,其中的變量將不復存在,不同的HTTP請求的變量都是獨立互不影響的。我們可使用global聲明、$GLOBALS全局數組變量、static靜態變量在同一HTTP請求中共享數據;使用session來實現會話級別的共享;使用緩存來實現站點全局數據共享。global聲明一般在方法中,在面向過程的開發中使用,平時不會用到。$GLOBALS和static經常會用到,但不能直接操作,而是在對象里或專門的方法來管理,比如常用的單例模式使用$GLOBALS和static保存。

        PHP程序中,我們都會考慮盡量使框架簡潔、高效、清晰、易用,這對開發和維護都很有好處。

        基本的程序模式使用MVC模式,分層分模塊、同時需要一個好用的URL router配合MVC。

        URL router:很關鍵的一個組件,決定著源碼文件的組織結構、代碼的清晰度。一個好的router,能方便地找到邏輯入口,體現框架的易用性。

        Model: 一直用數組。用數組主要擔心數組內容不清楚,在項目中,屬性參考數據庫字段,因此數組內容還是相對明確的,Model的操作使用數據訪問層DAO封裝。數據庫訪問中,直接轉化為數組形式,也比較高效。對于其它系統的交互數據對象,一般有接口文檔定義。對于ORM中的Active Record技術,能不用還是不用的好。

        View: 開始使用smarty,但在性能報告中,smarty執行的方法耗時占比太多太多,后來使用tmd_tpl,就一個文件,簡單易用高效,易修改。在視圖模板中,結合PHP語法,并輔于模板變量。MVC的思想是分離,并不代表不能在View中使用PHP語法。如果是API接口,可以直接把數據轉化為具體格式結果并返回。

        Controller: 或者action,代表著一個行為、一個方法、一個接口。只有一層的controller往往是不夠用的,一般要分成接口層、業務層、數據訪問層,可能還需要通信層。接口負責參數校驗、接入權限控制,調用具體的業務,最后返回數據或顯示頁面等。所有的業務最好都以接口層開始,在這之前應只做框架方面的事情,當我們需要閱讀某個業務實現時,只要順著接口層入口開始讀即可。業務層是執行實際的業務功能,業務層從數據訪問層獲得數據并進行業務上加工處理。數據訪問層從數據庫或調用接口獲取數據,可進行簡單的數據轉換處理。如果PHP只是作為數據展示前端,后端由C/C++/GO等執行業務,那只需要封裝業務層,在業務層里把數據請求到后端,然后返回給接口層。

        如何用PHP搭建自己的web框架? 如何用PHP搭建自己的web框架?

        以上是程序的基本框架結構,或者說是業務的流程結構,通常作為系統最重要的部分。但離實用還有距離,還有很多基礎功能要增加,比如session的處理,數據庫訪問,日志處理等功能。這些基本功能一般是可以獨立于框架的,可以在不同的框架上應用。功能類不要與框架耦合太緊,一般使用組合方式。我們將這些基礎功能按照用起來順手的方式封裝成核心類,使用單例或多例來調用,或對類進一步封裝成全局使用的方法,方便使用。

        如何用PHP搭建自己的web框架?

        如上圖,中心把握好、梳理好了,體現的是業務能力,因為隨著業務發展,自然會形成業務分層的結構;而周邊結合得好,體現的是框架能力,如何用得/開發得舒適順手的問題。

        在調用功能類或者業務類時,都會涉及到類的加載或導入問題。那是否使用自動加載功能呢?根據個人體驗和IDE支持程度,我覺得不直觀,對IDE不友好,如F3找不到定義的方法,這是我們開源系統學習的感受,還有對性能的影響。還是直接require/include方便,雖然多寫了些代碼,但確實對開發維護閱讀帶了極大的方便(除了修改名稱后導致引用變更不很方便,但可通過全局搜索來修改)。一些公共的類在入口里全局引用,業務類按需引用。性能損失?因為業務大部分時候都是垂直的,一般使用require/include即可,不需要require_once/include_once,即使多使用幾個once也沒什么關系,首先可保證正確性,且程序總體性能不是這個決定的。自動加載會增加很多判斷、指令還有棧操作,文件的查找、損失的性能

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 国产精品美女久久久| 亚洲国产精品成人精品无码区| 国产精品自在线拍国产第一页| 久久青青草原精品影院| 一本一本久久a久久综合精品蜜桃| 久久精品aⅴ无码中文字字幕重口| 久久精品亚洲福利| 亚洲午夜精品久久久久久人妖| 国产色婷婷五月精品综合在线| 无码日韩精品一区二区人妻| 久久综合久久自在自线精品自| 久久久久99精品成人片牛牛影视| 四虎国产精品永久一区| 久久精品国产亚洲AV无码麻豆| 亚洲第一永久AV网站久久精品男人的天堂AV | 久久夜色精品国产亚洲| 91精品国产91久久综合| 久久99国产综合精品女同| 亚洲av无码成人精品区| 久久国产香蕉一区精品| 国产精品 一区 在线| 2024国产精品极品色在线| 青青青青久久精品国产h| 国产精品久久久久久影院| 成人国产精品免费视频| 精品国产一区二区三区久久久狼| 中文字幕精品亚洲无线码一区| 日韩人妻无码精品无码中文字幕| 久草视频精品在线| 久久99热这里只有精品国产| 精品久久久久久99人妻| 国产色精品vr一区区三区| 国产精品午夜福利在线无码| 精品国产一区二区22| 久久久久亚洲精品中文字幕| 久久露脸国产精品| 无码AⅤ精品一区二区三区| 日韩精品视频在线观看免费 | 国产色婷婷精品综合在线| 国产精品福利区一区二区三区四区| 国产精品免费在线播放|