<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ## 架構及擴展 ### 一、單入口應用程序 基于SpeedPHP框架開發的應用程序,均是“單入口應用程序”(以下簡稱單入口程序),這是SpeedPHP框架的默認配置。 **單入口程序概述** 指在同一個應用程序中,訪問者僅可以通過相同的一個文件來使用整個應用程序的功能。這個文件稱作“入口文件”,而這種結構的應用程序整體就稱作“單入口應用程序”。 > 在sp框架內,入口文件就是程序頂級目錄的index.php文件。 一般而言,在單入口程序中,入口文件都是通過傳入的參數(arg()獲取)來判斷應該執行的程序,并轉向到該程序來執行。 **優點** 單入口程序有著以下各種優點: - 單入口程序安全性提高。多入口程序很容易造成安全配置和管理的混亂,而單入口程序可以統一使用相同的安全配置,從管理和配置上提高了應用程序的安全性。 - 全局配置、權限控制等更簡單。 - 有利于Url重寫(偽靜態)的實現。 - 隨著云平臺/云主機的日益流行,web程序透明分布式已經成為了常態,單入口能更好適應這種結構。 **單入口程序須知** 在使用單入口程序的時候,需要注意以下問題: - 單入口程序是一個整體的應用程序,也就是該程序的范圍,應該是入口文件能夠訪問(轉向)的極限。 - 單入口程序通常用在中小型規模的應用程序(百萬訪問級以下)中,如果是大型應用程序(千萬訪問級),可以通過分離多套應用程序的方式拆分。 - 建議初學者徹底放棄多入口文件的做法。 - 入口文件是一切程序的入口。 ### 二、架構設計 SpeedPHP框架的架構設計遵循以下規則:MVC基礎,直接驅動,autoload執行。 **MVC基礎架構** MVC(Model模型 - View視圖 - Controller控制器)的三層架構是SpeedPHP框架的核心架構,這是一個實踐證明了較為適合WEB系統開發的架構。 - M層以Model類為父類,提供數據及業務相關操作的模型結構標準與功能。 - V層以PHP的模板引擎為基礎,提供業界通用的模板引擎功能。 - C層以Controller類為父類,提供輕便的程序轉向執行功能。 MVC架構是面向對象編程的最佳實踐之一,通過對父類的繼承和覆蓋,將可讓SpeedPHP框架的MVC各部件更強大和更適合當前的應用程序。 同時,從軟件工程角度而言,MVC架構也較為適合軟件建模以及團隊開發。 **直接驅動** 在大部分的通用PHP框架中,對數據庫及模板引擎的支持,都是三層結構: 底層驅動(對數據庫或模板的原始操作)-> 抽象層(轉換表達式)-> 應用層(通用編程接口) 使用三層結構的主要原因有二: 1. 抽象層能夠方便地支持多種數據庫類型(模板引擎)。 2. 應用層功能更多。 但在實際開發中,真正“經常”使用的數據庫接口功能(模板引擎功能)都是比較少的,不外乎是CRUD(查增改刪)等幾個簡化的操作以及復雜的SQL執行,呈現80/20的現象。 也就是“開發者80%時間使用的功能,只占全部功能的20%。而有80%的功能,只有20%機會會使用到”。 > 另外,經過試驗也可以發現,其實在沒有抽象層的情況,支持多數據庫多模板引擎也并非難事。 > 根據實際開發情況來看,在項目開發或運作過程中,突然更換數據庫類型的情況,也是極其罕見的。并且現代系統架構的做法都是通過遠程接口(如thrift等)來對接另一個數據庫類型而不是直接鏈接。 綜上考慮,SpeedPHP框架去除了抽象層的設計:底層驅動 -> 應用層。在保證應用成提供了常用接口功能的前提下,底層驅動和應用層直接實現了原本抽象層才能做到的事情,當然,SpeedPHP框架的直接驅動,在一定程度上,減少了應用層的功能數量。 在新版sp框架中,更進一步,把原來多個抽象數據庫驅動的模式,直接改成只有一個Model類的模式,該類包含了應用功能及數據庫驅動,比原先做了極大的精簡改進。 所以,一般來說,較復雜的數據庫及模板引擎功能,均建議直接使用數據庫句柄(SQL語句)和模板引擎對象來實現(這部分只會有20%機會出現)。 **autoload執行** 3.1版本及之前的sp框架,遵循的類庫載入規則是“按需載入”及“擴展點”的模式,雖然在性能上面已經做到極致,但在使用上面,會有一些不盡人意的感覺。 > 比如說,實例化一個php類,則需要使用spClass函數;然而“最php”的方式卻是new。 所以現在新版的sp框架,直接通過php內置的autoload機制,來對類文件進行實例化。 好處在于: - 仍然是按需載入,仍然是快速如初。因為autoload僅僅是搜索類定于文件的方式改變的,但是內里卻還是類似spClass的模式——也就是僅僅根據需要來載入對應的一個類文件。 - 可以用new語法對類進行實例化,既符合php原生語法,而且對IDE(編輯器)的支持更好。 - 擴展類庫也可以通過new的方式直接在框架類使用,如同普通的php類一樣;或者換句話說普通的類庫也可以是擴展類庫。 > 當使用new語法時,php的大部分IDE會提供類名提示,類成員函數提示等便利。 ### 三、第三方類庫和擴展 autoload機制中,所有php類文件只要放到model、include、controller三個目錄之一里面,并且類名和文件名相同,那么即可在程序里面用new來對其實例化,當然,并不需要require進來。 - 只要是php類,類名和文件名相同。 - 放在model、include、controller三個目錄之一 - 通過new語法可以對其實例化,并且按照正常php類的方式使用。 - 不需要預先require或include類文件進來。 > 目錄搜索優先級是:model > include > controller,故最常用的類庫放置在model目錄,而不經常使用的放include, > 而controller主要是方便隔控制器調用某些方法,一般controller目錄不建議放除控制器類文件以外的php文件。 **不再需要擴展點** 新版的sp框架已經不再需要擴展點,取而代之的是更為簡便的方式。 原有框架共有四個擴展點,以下新的對應方式: 路由前擴展: - 在路由解析前進行的一系列操作。該擴展點主要用于偽靜態的實現以及ACL權限認證的入口判斷。 - 新版偽靜態已經是內置并且十分精簡的程序,性能效率非常高,所以不再需要在路由前進行配置。 - 而權限控制,在新版中是定位到了控制器層面進行控制(畢竟就叫控制器嘛),如BaseController的init()函數以及各控制器自身的init()函數,均是實現全局或局部權限控制的位置。比起之前的路由前控制,更為“用戶級”,也更容易操作。 路由后擴展: - 路由后擴展在舊版中并沒有自帶的使用功能。一般在路由后需要做的會是記錄日志、壓縮輸出等。 - 新版可以直接在入口文件的最后進行此類操作。 URL擴展: - 實際上也是舊版偽靜態的一部分。 - 新版的偽靜態已經包含了此功能,故已經不再需要。 緩存擴展: - 舊版上面緩存可以通過配置進行替換驅動。 - 新版更建議直接使用緩存,而配置也是比較簡單可以拿到的。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看