版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、1-基礎1-基礎.note安裝.note安裝框架放入WEB運行環(huán)境(前提是你的WEB運嚴格來說,無需安裝過程,這里所說的安裝其實就是把行環(huán)境已經OK),可以通過兩種方式獲取和安裝。一、安裝獲取的方式很多,官方()是最和文檔獲取來源。官網提供了版本的:二、使用Composer安裝支持使用Composer安裝,如果還沒有安裝 Composer,你可以按 Composer安裝中的Mac OS X 中可以運行如下命令:安裝。在 Linux 和 | phpcurl -sS mv composer.phar /usr/local/bin/composer在 Windows 中,你需要并運行 Compose
2、r-Setup.exe。如果遇到任何問題或者想更深入地學習 Composer,請參考 Composer 文檔(英文),Composer 中文。如果你已經安裝有 Composer 請確保使用的是最新版本,你可以用 composer self-update 命令更新 Composer 為最新版本。然后在命令行下面,切換到你的web根目錄下面并執(zhí)行下面令:composer create-project topthink/think tp5 dev-master -prefer-dist由于目前尚未正式發(fā)布,所以先用dev-master分支。如果出現錯誤提示,請根據提示操作或者參考Composer中文
3、文檔。如果國內composer的速度比較慢,可以參考這里的說明使用國內鏡像無論你采用什么方式獲取的框架,現在只需要做最后一步來驗證是否正常運行。在瀏覽器中輸入地址:如果瀏覽器輸出:的環(huán)境要求如下:PHP >= 5.4.0PDO PHP Extension CURL PHP Extension恭喜你,現在已經完成的安裝!如果你無法正常運行并顯示的歡迎頁面,那么請檢查下你的服務器環(huán)境:PHP5.4以上版本(注意: PHP5.4dev版本和PHP6均不支持) WEB服務器是否正常啟動開發(fā)規(guī)范.note命名規(guī)范名規(guī)范如下:目錄和文件命名目錄和文件名采用 小寫+下劃線,并且以小寫字母開頭; 類庫、
4、函數文件統(tǒng)一以.php為后綴;類的文件名均以命名空間定義,并且命名空間的路徑和類庫文件所在路徑一致( 類名和類文件名保持一致,并統(tǒng)一采用駝峰法命名(首字母大寫)大小寫);類、和屬性命名類名采用駝峰法,并且首字母大寫,例如User、UserType;名使用駝峰法,并且首字母小寫或者使用下劃線“_”,例如getUserName,_parseType,通常下劃線開頭的 屬性屬于私有;名使用駝峰法,并且首字母小寫或者使用下劃線“_”,例如tableName、_instance,通常下劃線開頭的屬性屬于私有屬性;作為魔法,例如 call 和 autoload;以雙下劃線“ ”打頭的函數或函數命名函數名使
5、用小寫字母和下劃線(小寫字母開頭)的方式,例如get_ip;命名以大寫字母和下劃線命名,例如 APP_DEBUG和 APP_MODE;配置命名配置參數以小寫字母和下劃線命名,例如url_route_on;數據表和字段命名數據表和字段采用小寫加下劃線方式命名,并注意字段名不要以下劃線開頭,例如think_user 表和user_name字段,類似_username 這樣的數據表字段可能會被過濾。應用類庫命名空間規(guī)范應用類庫的根命名空為app(可以設置APP_NAMESPACE更改);例如:appindexcontrollerIndex和appindexmUser。請避免使用PHP保留字(保留字列
6、表參見)作為、類名 和名,以及命名空間名,否則會造成系統(tǒng)錯誤。目錄結構.note最新版框架后,解壓縮到web目錄下面,可以看到初始的目錄結構如下:5.0的部署建議是public目錄作為web目錄內容,其它都是web目錄之外,當然,你必須要修改public/index.php中的相關路徑。如果沒法做到這點,請記得設置目錄的權限或者添加目錄列表的保護文件。5.0版本自帶了一個完整的應用目錄結構和默認的應用文件,開發(fā)可以在這個基礎之上靈活調整。上面的目錄結構和名稱是可以改變的,尤其是應用的目錄結構,這取決于你的文件和配置參數。由于.0.0的架構設計對模塊的目錄結構保留了很多的靈活性,尤其是對于用于的
7、目錄具有高度router.php用于php自帶webserver支持,可用于快速測試啟動命令:php -S localhost:8888 router.phpproject 應用部署目錄application應用目錄(可設置) common公共模塊目錄(可更改) index模塊目錄(可更改) config.php模塊配置文件 common.php模塊函數文件 controller器目錄 m模型目錄 view視圖目錄 .類庫目錄 d.php命令行工具配置文件 common.php應用公共(函數)文件 config.php應用(公共)配置文件 database.php數據庫配置文件 route.p
8、hp路由配置文件runtime應用的運行時目錄(可寫,可設置)extend擴展類庫目錄(可定義)publicWEB 部署目錄(對外目錄) static靜態(tài)資源存放目錄(css,js,image) index.php應用文件 .htaccess用于 apache 的重寫框架系統(tǒng)目錄 lang語言包目錄 library框架類庫目錄 behavior系統(tǒng)行為類庫目錄 thinkThink 類庫包目錄 traits系統(tǒng) Traits 目錄 mode應用模式目錄 tpl系統(tǒng)模板目錄 .htaccess用于 apache 的重寫 .travis.ymlCI件 base.php基礎件 composer.js
9、oncomposer件 convention.php慣例配置文件 helper.php助手函數文件(可選) LICENSE.txt說明文件 phpunit.xml單元測試配置文件 ME.mdME 文件 start.php框架引導文件vendor第類庫目錄(Composer).gitignoreGit 忽略規(guī)則build.php自動生成件(參考)composer.jsoncomposer件console命令行工具LICENSE.txt說明文件ME.mdME 文件router.php快速測試文件(用于PHP自帶webserver)的定制化,因此上述的目錄結構建議參考。2-架構.note2-架構總覽
10、.note.0應用基于MVC(模型-視圖-器)的方式來組織。MVC是一個設計模式,它強制性的使應用程序的輸入、處理和輸出。使用MVC應用程序被分成三個部件:模型(M)、視圖(V)、器(C),它們各自處理的任務。5.0的URL受路由決定,如果關閉路由或者沒有匹配路由的情況下,則是基于:(或者其它應用文件)/模塊/器/操作/參數/值.下面的一些概念有必要做下了解,可能在后面的內容中經常會被提及。文件用戶請求的PHP文件,負責處理一個請求(注意,不一定是URL請求)的生命周期,最常見的文件就是index.php,有時候也會為了某些特殊的需求而增加新的文件,例如給文件。模塊單獨設置的一個文件admin
11、.php或者一個器程序console.php都屬于應用應用在中是一個管理系統(tǒng)架構及生命周期的對象,的 thinkApp類完成,應用通常在文件中被調文件。用和執(zhí)行,具有相同的應用目錄(APP_PATH)的應用我們認為是同一個應用,但一個應用可能多個應用具有的基礎配置文件、公共文件,也稱為應用公共配置和公共函數文件。模塊一個典型的應用是由多個模塊組成的,這些模塊通常都是應用目錄下面的一個子目錄,每個模塊都 件、公共文件和類庫文件。的配置文器每個模塊擁有的器類。的MVC類庫及配置文件,一個模塊下面有多個器負責響應請求,而每個器其實就是一個器主要負責請求的接收,并調用相關的模型處理,并最終通過視圖輸出
12、。嚴格來說, 邏輯處理。器不應該過多的介入業(yè)務5.0的器類比較靈活,可以無需繼承任何基礎類庫。一個典型的Index器類如下:操作namespaceappindexcontroller;classIndexpublicfunctionindex() return'hello,!'事實上,5.0中器是可以被跳過的,通過路由我們可以直接把請求調度到某個模型或者其他的類進行處理。5.0支持單一模塊架構設計,如果你的應用下面只有一個模塊,那么這個模塊的子目錄可以省略,并且在文件中定義如下:define('APP_MULTI_MODULE',false);一個器包含多個操作
13、(),操作是一個URL的最小單元。下面是一個典型的Index器的操作定義,包含了兩個操作:操作可以不使用任何參數,如果定義了一個非可選參數,則該參數必須通過用戶請求傳入,如果是URL請求,則通常是$_GET或者$_POST方式傳入。模型模型類通常完成實際的業(yè)務邏輯和數據,并返回和格式無關的數據。模型類并不一定要數據庫,而且在5.0的架構設計中,只有進行實際的數據庫操作的時候,進行數據庫的連接,是真正的惰性連接。的模型層支持多層設計,你可以對模型層進行更細化的設計和分工,例如把模型層分為邏輯層/服務 層等等。層/視圖器調用模型類后返回的數據通過視圖組裝成不同格式的輸出。視圖根據不同的需求,來決定
14、調用模板引擎進行內容 后輸出還是直接輸出。視圖通常會有一系列的模板文件對應不同的器和操作,并且支持模板。驅動系統(tǒng)很多的組件都采用驅動式設計,從而可以更靈活的擴展,驅動類的位置默認是放入類庫目錄下面,也可以重新定義驅動類庫名空間而改變驅動的文件位置。行為行為(Behavior)是在預先定義一個應用位置執(zhí)行的一些操作。類似于AOP編程中的“切面”的概念,給某一個切面綁定相關行為就成了一種類AOP編程的思想。所以,行置上。常是和某個位置相關,行為的執(zhí)行時間依賴于綁定到了哪個位要執(zhí)行行為,首先要在應用進行行為偵聽,例如:然后對某個位置進行行為綁定:一個位置上如果綁定了多個行為的,按照綁定的順序依次執(zhí)行
15、,除非遇到中斷。命名空間采用了PHP名空間設計和規(guī)劃類庫文件,并且符合PSR-4的自動加載規(guī)范。文件.note文件采用單一模式進行項目部署和,無論完成什么功能,一個應用一個統(tǒng)一(但不一定是唯一)的入口。/ 綁定行為到app_init位置thinkHook:add('app_init','appindexbehaviorTest');/ 在app_init位置偵聽行為thinkHook:listen('app_init');namespaceappindexcontroller;classIndexpublicfunctionindex() ret
16、urn'index'publicfunctionhello($name) return'Hello,'.$name;應該說,所有應用都是從文件開始的,并且不同應用的文件是類似的。文件定義文件主要完成:定義框架路徑、項目路徑(可選) 定義調試模式和應用模式(可選)定義系統(tǒng)相關(可選)載入框架文件(必須)5.0默認的應用文件位于public/index.php,內容如下:修改文件位置請查看章節(jié)<部署-虛擬主機環(huán)境>文件,而不需要調用應用執(zhí)行,系統(tǒng)會自動調用thinkApp類的run默認情況下,只需要加載框架,如果你需要在執(zhí)行run之前做其他的操作,可以這
17、樣定義文件:生命周期.note本篇內容我們對.0的應用請求的生命周期做大致的,以便于開發(fā)者了解整個執(zhí)行流程。1、文件用戶發(fā)起的請求都會經過應用的文件,通常是 public/index.php文件。當然,你也可以更改或者增加新的件。文通常文件的代碼都比較簡單,一個普通的文件代碼如下:文件已定義一些為主,支持的請參考后續(xù)的內容或者附錄部分。通常,我們不建議在應用文件中加入過多的代碼,尤其是和業(yè)務邏輯相關的代碼。2、引導文件接下來就是執(zhí)行框架的引導文件,start.php文件就是系統(tǒng)默認的一個引導文件。在引導文件中,會依次執(zhí)行下面操作:加載系統(tǒng)定義;自動加載機制;模式件;加載模式命名空間定義;加載模
18、式別件;/ 應用文件/ 定義項目路徑define('APP_PATH', DIR . '/./application/');/ 開啟調試模式define('APP_DEBUG', true);/ 加載框架引導文件require DIR . '/./start.php'/ 改變應用目錄的名稱define('APP_PATH', DIR .'/apps/');/ 關閉應用自動執(zhí)行define('APP_AUTO_RUN', false);/ 加載框架引導文件require'./t
19、hink/start.php'/ 這里添加應用執(zhí)行之前需要的代碼/ 類已經支持自動加載./ 執(zhí)行應用thinkApp:run();文件中還可以定義一些系統(tǒng)變量,用于相關的綁定操作(通常用于多個的情況),這個會在后面涉及,暫且不提。給APP_PATH定義絕對路徑會提的加載效率。文件位置的設計是應用部署更安全,public目錄為web可目錄,其他的文件都可以放到非WEB目錄下面。/ 定義應用目錄define('APP_PATH', DIR . '/./application/');/ 開啟調試模式define('APP_DEBUG', tru
20、e);/ 加載框架引導文件require DIR . '/./start.php'錯誤和異常處理機制; 加載模式配置文件;加載模式行件;如果開啟自動執(zhí)行則執(zhí)行應用;當前應用的模式由APP_MODE決定,默認為common模式,如果需要更改應用模式則可以在應用 定義。文件中更改如果在你的應用文件中更改了默認的引導文件,則上述執(zhí)行流程可能會跟隨發(fā)生變化。3、自動加載系統(tǒng)會調用Loader:register()自動加載,在這一步完成后,所有符合規(guī)范的類庫(Composer依賴加載的第類庫)都將自動加載。系統(tǒng)的自動加載由兩個部分組成:1.2.系統(tǒng)的自動加載thinkLoader:aut
21、oload Composer自動加載(符合Composer規(guī)范即可)一個類庫的自動加載檢測順序為:1. 是義類庫;2. Composer自動加載檢測;3. 是否為名空間;4. 檢測EXTEND_PATH目錄下的擴展類庫;如果檢測到以上任何一處,則按照PSR-4命名規(guī)范自動加載??梢钥吹?,定義類庫的方式是最高效的。在調試模式下面如果沒有加載到會一個notic錯誤。4、錯誤和異常機制執(zhí)行Error:register()由三部分組成:錯誤和異常處理機制。應用關閉錯誤處理異常處理:thinkError:appShutdown:thinkError:appError:thinkError:appExce
22、ption 應用關閉是為了便于攔截一些系統(tǒng)錯誤。在整個應用請求的生命周期過程中,如果拋出了異?;蛘邍乐劐e誤,均會導致應用提前結束,并響應輸出異常和錯誤信 息。5、應用初始化執(zhí)行應用的第一步操作就是對應用進行初始化,:加載應用(公共)配置; 加載應用狀態(tài)配置;加載別名定義; 加載行為定義;加載公共(函數)文件;加載擴展配置文件(由extra_config_list定義);加載擴展函數文件(由extra_file_list定義); 設置默認時區(qū);加載系統(tǒng)語言包;6、URL檢測應用初始化完成后,就會進行URL的檢測,PATH_INFO檢測和URL后綴檢測。5.0的URL必須是PATH_INFO方式(
23、兼容方式)的URL地址,例如:所以,如果你的環(huán)境只能支持普通方式的URL參數,那么必須使用如果是命令行下面文件的話,則通過$phpindex.php index/index/hello/val/value.獲取到正常的$_SERVER'PATH_INFO'參數后才能繼續(xù)。如果有設置url_deny_suffix參數,則會過濾的URL后綴請求。7、路由檢測如果開啟了url_route_on參數的話,會首先進行URL的路由檢測。如果一旦檢測到匹配的路由,根據定義的路由地址會5.0的路由地址支持如下方式:到相應的URL調度。路由到模塊/器/操作;路由到外部重定向地址;路由到器;路由到
24、閉包函數;路由到類的;路由地址可能會受域名綁定的影響。如果關閉路由或者路由檢測無效則進行默認的模塊/器/操作的分析識別。8、分發(fā)請求在完成了URL檢測和路由檢測之后,路由器會分發(fā)請求到對應的路由地址,這也是應用請求的生命周期中最重要的一個 環(huán)節(jié)。在這一步驟中,完成應用的業(yè)務邏輯及數據返回。建議統(tǒng)一使用return返回數據,而不是echo輸出,如非必要,請不要執(zhí)行exit中斷。直接echo輸出的數據將無法進行自動轉換響應輸出的便利。下面是系統(tǒng)支持的分發(fā)請求機制,可以根據情況選擇:模塊/器/操作這是默認的分發(fā)請求機制,系統(tǒng)會根據URL或者路由地址來當前請求的模塊、器和操作名,并自動調用相應的器類,
25、執(zhí)行操作對應的。該機制下面,首先會當前模塊,并進行模塊的初始化操作(和應用的初始化操作類似),模塊的配置參數會覆蓋應用的尚未生效的配置參數。支持模塊、URL參數綁定到,以及操作綁定到類等一些功能。器和前式類似,只是無需模塊、器和操作,直接分發(fā)請求到一個指定的器類的,因此沒有進行模塊的初始化操作。外部重定向可以直接分發(fā)請求到一個外部的重定向地址,支持指定重定向代碼,默認為301重定向。閉包函數路由地址定義的時候可以直接采用閉包函數,完成一些相對簡單的邏輯操作和輸出。類的除了以上,還支持分發(fā)請求到類的,:' 類的靜態(tài): 'blog/:id'=>'orgutil
26、Blog::'blog/:id'=>'appindexcontrollerBlog',''如果在應用初始化的時候指定了應用調度方式,那么路由檢測是可選的??梢允褂?thinkApp:dispatch() 進行應用調度。9、響應輸出器的所有操作都是return返回而不是直接輸出,系統(tǒng)會調用Response:send將最終的應用返回的數據輸出到頁面或者客戶端,并自動轉換成default_return_type參數配置的格式。所以,應用執(zhí)行的數據輸出只需要返回一個正常的PHP數據即可。10、應用結束事實上,在應用的數據響應輸出之后,應用并沒真正的
27、結束,系統(tǒng)會在應用輸出或者中斷后進行日志保存寫入操作。系統(tǒng)的日志用戶調試輸出的和系統(tǒng)自動生成的日志,統(tǒng)一會在應用結束的時候進行寫入操作。而日志的寫入操作受日志初始化的影響,支持寫入到日志文件、頁面Trace,甚至是Socket服務器。URL.noteURL設計.0在沒有啟用路由的情況下典型的URL規(guī)則是:支持切換到命令行,如果切換到命令行模式下面的規(guī)則是:>php.exe index.php(或者其它應用文件) 模塊/器/操作/參數名/參數值.可以看到,無論是URL還是命令行,都采用PATH_INFO地址,其中PATH_INFO的分隔符是可以設置的。注意:5.0取消了URL模式的概念,并
28、且普通模式的URL不再支持,如果不支持PATHINFO的服務器可以使用兼容模式如下:必要的時候,我們可以通過某種方式,省略URL里面的模塊和器。URL大小寫默認情況下,URL是不區(qū)分大小寫的,也就是說 URL里面的模塊/時候會轉換為駝峰法處理。器/操作名會自動轉換為小寫,器在最后調用的例如: 和下面的是等效的如果下面的地址st/如果不希望URL自動轉換,可以在應用配置文件中設置:隱藏文件在.0中,出于優(yōu)化的URL原則,還支持通過URL重寫隱藏文件,下面以Apache為例說明隱藏應用入口文件index.php的設置。下面是Apache的配置過程,可以參考下:1、httpd.conf配置文件中加載
29、了mod_rewrite.so模塊2、AllowOverride None 將None改為 All 3、在應用文件添加.htaccess文件,內容如下: 和下面的是等效的/ 關閉器名的自動轉換'url_controller_convert'=> false,/ 關閉操作名的自動轉換'url_action_convert'=> false,參數值.(或者其它應用文件)?s=/模塊/器/操作/參數名/值.(或者其它應用文件)/模塊/器/操作/參數名/參數模塊設計.note5.0版本對模塊的功能做了靈活設計,默認采用多模塊的架構,并且支持單一模塊設計,所有
30、模塊為根命名空間(可配置更改)。名空間均以app作目錄結構標準的應用和模塊目錄結構如下:遵循.0名規(guī)范,模塊目錄全部采用小寫和下劃線命名。模塊名稱請避免使用PHP保留關鍵字(保留字列表參見),否則會造成系統(tǒng)錯誤。其中common模塊是一個特殊的模塊,默認是直接的,用于放置一些公共的類庫用于其他模塊的繼承。如果要更改公共模塊的名稱,可以在文件中定義:define('COMMON_MODULE','base');runtime目錄是默認的運行時目錄,存放應用的相關日志、緩存等。要更改默認的runtime目錄位置,可以在應用文件中定義:define('RUNT
31、IME_PATH','./runtime/');模塊類庫以app模塊名開頭,例如:一個模塊下面的類庫文件名空其中app可以通過定義的方式更改,例如在文件中定義:define('APP_NAMESPACE','application');那么,index模塊的類庫命名空間則變成:的關于類庫和命名空間的以參考下一章節(jié):命名空間。/ index模塊的Index器類 applicationindexcontrollerIndex/ index模塊的User模型類 applicationindexmUser/ index模塊的Index器類 app
32、indexcontrollerIndex/ index模塊的User模型類 appindexmUserapplication應用目錄(可設置) common公共模塊目錄(可更改) runtime應用的運行時目錄(可寫,可設置) common.php公共函數文件 route.php路由配置文件 database.php數據庫配置文件 config.php公共配置文件 module1模塊1目錄 config.php模塊配置文件 common.php模塊函數文件 controller器目錄 m模型目錄 view視圖目錄 .類庫目錄 module2模塊2目錄 config.php模塊配置文件 comm
33、on.php模塊函數文件 controller器目錄 m模型目錄 view視圖目錄 .類庫目錄<IfModule mod_rewrite.c>RewriteEngineonRewriteCond%REQUEST_FILENAME !-d RewriteCond%REQUEST_FILENAME !-fRewriteRule (.*)$ index.php/$1 QSA,PT,L</IfModule>模塊和器隱藏由于默認是采用多模塊的支持,所以多個模塊的情況下必須在URL地址中標識當前模塊,如果只有一個模塊的話,可以進行模塊綁定,是應用的公共文件中添加如下代碼:綁定后,我
34、們的URL地址則變成:的模塊是index模塊。如果你的應用比較簡單,模塊和器都只有一個,那么可以在應用公共文件中綁定模塊和器,如下:設置后,我們的URL地址則變成:應用/操作/參數名/參數值.的模塊是index模塊,器是Index器單一模塊如果你的應用比較簡單,只有唯一一個模塊,那么可以進一步簡化成使用單一模塊結構,如下:首先在文件中定義:然后,調整應用目錄的結構為如下:URL地址變成(或者其它應用)/器/操作/參數名/參數值.同時,單一模塊設計下的應用類庫名空間也有所調整,例如:原來的變成的URL簡化和定制還可以通過URL路由功能實現。命名空間.note命名空間appcontrollerIn
35、dex appmUserappindexcontrollerIndex appindexmUserapplication應用目錄(可設置) runtime應用的運行時目錄(可寫,可設置) controller器目錄 m模型目錄 view視圖目錄 .類庫目錄 common.php函數文件 route.php路由配置文件 database.php數據庫配置文件 config.php配置文件/ 關閉多模塊設計define('APP_MULTI_MODULE',false);/ 綁定index模塊的index器thinkRoute:bind('module','
36、index/index');器/操作/參數名/參數值./ 綁定index模塊thinkRoute:bind('module','index');采用命名空間方式定義和自動加載類庫文件,有效的解決了多模塊和Composer類庫之間題,并且實現了更加高效的類庫自動加載機制。名空間問在.0中,只需要給類庫正確定義所在名空間,并且命名空間的路徑與類庫文件的目錄一致,那么就可以實現類的自動加載,從而實現真正的惰性加載。例如,thinkcachedriverFile類的定義為:如果我們實例化該類的話,應該是:$class = new thinkcachedriver
37、File();系統(tǒng)會自動加載該類對應路徑的類文件,其所在的路徑是/library/think/cache/driver/File.php。5.0默認的目錄規(guī)范是小寫,類文件命名是駝峰法,并且首字母大寫。原則上,可以支持駝峰法命名的目錄,只名空間定義和目錄一致即可,例如:我們實例化$class = new ThinkCacheDriverFile();系統(tǒng)則會自動加載/library/Think/Cache/Driver/File.php文件。根命名空間(類庫包)根命名空間是一個關鍵的概念,以上面的thinkcachedriverFile類為例,think就是一個根命名空間,其對應的初始命名空間
38、目錄就是系統(tǒng)的類庫目錄( 個類庫包。/library/think),我們可以簡單的理解一個根命名空間對應了一系統(tǒng)內置的幾個根命名空間(類庫包)如下:如果需要增加新的根命名空間,有兩種方式:新的根命名空間或者放入EXTEND_PATH目錄(自動)。自動我們只需要把的類庫包目錄放入EXTEND_PATH目錄(extend,可配置),就可以自動對應名空間,例如:我們在extend目錄下面新增一個my目錄,然后定義一個myTest類( 類文件位于extend/my/Test.php)如下:namespacemy; classTest publicfunctionsayHello() echo'
39、hello'請注意本手冊中的示例代碼為了簡潔,如無指定類庫名空間的話, 都表示指的是think命名空間,例如下面的代碼:Route:get('hello','index/hello');請自行使用 use thinkRoute或者thinkRoute:get('hello','index/hello');名稱描述類庫目錄think系統(tǒng)類庫/library/thinktraits系統(tǒng)Trait類庫/library/traitsapp應用類庫applicationnamespacethinkcachedriver; class
40、File 如果不清楚命名空間的基本概念,可以參考PHP手冊:PHP命名空間特別注意的是,如果你需要調用PHP內置的類庫,或者第沒有使用命名空間的類庫,記得在實例化類庫的時候加上 ,例如:/ 錯誤的用法$class = new stdClass();$xml = new SimpleXmlElement($xmlstr);/ 正確的用法$class = new stdClass();$xml = new SimpleXmlElement($xmlstr);我們就可以直接實例化和調用:如果我們在應用文件中重新定義了EXTEND_PATH的話,還可以改變myTest類文件的位置,例如:define(
41、'EXTEND_PATH','./vendor/');那么myTest類文件的位置就變成了/vendor/my/File.php。手動也可以通過手動的方式新的根命名空間,例如:在應用文件中添加下面的代碼:thinkLoader:addNamespace('my','./application/extend/my/');如果要同時多個根命名空間,可以使用:也可以直接在應用的配置文件中添加配置,系統(tǒng)會在應用執(zhí)行的時候自動。應用類庫包為了避免和Composer自動加載的類庫,應用類庫名空間的根都統(tǒng)一以app命名,例如:其類文件位于 ap
42、plication/index/m/User.php。其類文件位于 application/admin/event/User.php。自動加載.note概述.0 真正實現了按需加載,所有類庫采用自動加載機制,并且支持類庫和composer類庫的自動加載。自動加載的實現由thinkLoader類庫完成,自動加載規(guī)范符合PHP的PSR-4。自動加載由于新版完全采用了命名空間的特性,因此只需要給類庫正確定義所在名空間,而命名空間的路徑與類庫文件的目錄一致,那么就可以實現類的自動加載。在符合PSR-4規(guī)范的條件下,類庫的自動加載檢測順序如下:1、優(yōu)先檢測是義類庫2、檢測composer自動加載的類庫3
43、、檢測根命名空間是否已經namespaceappadminEvent; classUser namespace appindexm; classUserextendsthinkM'root_namespace' => 'my' => './application/extend/my/', 'org' => './application/extend/org/',thinkLoader:addNamespace('my' => './application/extend
44、/my/', 'org' => './application/extend/org/',);$Test = new myTest();$Test->sayHello();4、檢測擴展類庫目錄EXTEND_PATH下是否根命名空間對應的子目錄系統(tǒng)會按順序檢測,一旦檢測生效的話,就會按照PSR-4規(guī)范自動載入對應的類庫文件。類庫遵循我們上面名空間定義規(guī)范的話,基本上可以完成類庫的自動加載了,但是如果定義了較多名空間的話,效率會有所下降,所以,我們可以給常用的類庫定義類庫命名空間定位更高效,例如:。命名類庫相當于給類文件定義了一個別名,效率會比也可
45、以利用addMap批量導入類庫定義,例如:類庫導入如果你不需要系統(tǒng)的自動加載功能,又或者沒有使用命名空間的話,那么也可以使用thinkLoader類的import動加載類庫文件,例如:手類庫導入也采用類似命名空間的概念(但不需要實際名空間支持),支持的“根命名空間”:如果完全遵從系統(tǒng)名空間定義的話,來說無需手動加載類庫文件,直接實例化即可。Composer自動加載5.0版本支持Composer安裝的類庫的自動加載,你可以直接按照Composer依賴庫中名空間直接調用。traits引入.note.0開始采用PHP5.4的trait功能來作為一種擴展機制,可以方便的實現一個類庫的多繼承問題。Tra
46、its 是一種為類似 PHP 的單繼承語言而準備的代碼復用機制。Trait 為了減少單繼承語言的限制,使開發(fā)人員能夠地在不同層次結構內的類中復用集。Traits和類組合的語義是定義了式來減少復雜性,避免傳統(tǒng)多繼承和混入類(Mixin)相關的典型問題。但由于PHP5.4版本不支持trait的自動加載,因此如果是PHP5.4版本,必須手動導入trait類庫,系統(tǒng)提供了一個快捷的load_trait函數用于自動加載trait類庫,例如,可以這樣正確引入trait類庫。namespaceappindexcontroller;load_trait('controller/View');
47、/ 引入traitscontrollerViewclassindex use traitscontrollerView;publicfunctionindex()$this->assign('name','value');$this->show('index');目錄說明behavior系統(tǒng)行為類庫think基類庫traits系統(tǒng)Traits類庫app應用類庫表示當前模塊類庫包Loader:import('org.util.array'); Loader:import('.util.upload');雖
48、然通過類庫的方式的類可以不強制要求對應命名空間目錄,但是仍然建議遵循PSR-4規(guī)范定義類庫和目錄。$map = 'thinkLog'=>LIB_PATH.'thinkLog.php', 'orgutilarray'=>LIB_PATH.'orgutilArray.php'Loader:addMap($map);Loader:addMap('thinkLog',LIB_PATH.'thinkLog.php'); Loader:addMap('orgutilArray',LI
49、B_PATH.'orgutilArray.php');如果你的PHP版本大于5.5的話,則可以省略T函數引入trait??梢灾С滞瑫r引入多個trait類庫,例如:或者使用trait 方式引入的類庫需要注意優(yōu)先級,從基類繼承的成員被 trait蓋了 trait 的,而 trait 則覆蓋了被繼承的。的成員所覆蓋。優(yōu)先順序是來自當前類的成員覆trait 類中不支持定義類的,在 trait 中定義的屬性將不能在當前類中或者繼承的類中重新定義。的解決我們可以在一個類庫中引入多個trait類庫,如果兩個 trait 都定義了一個同名的致命錯誤。,如果沒有明確解決將會產生一個為了解決多個
50、trait 在同一個類中名,需要使用 insteadof 操作符來明確指定使用中的哪一個。以上排除掉其它,as 操作符可以將其中一個的以另一個名稱來引入。的關于traits的以參考PHP官方手冊。api友好.note新版API開發(fā)做了很多的優(yōu)化,并且不依賴原來的API模式擴展。數據輸出新版的器輸出采用Response類統(tǒng)一處理,而不是直接在器中進行輸出,通過設置default_return_type就可以自動進行數據轉換處理,來說,你只需要在器中返回字符串或者數組即可,例如如果我們配置:'default_return_type'=>'json'系統(tǒng)提供了一
51、些trait類庫,主要是用于器和模型類的擴展。這些系統(tǒng)內置的trait類庫的根命名空間采用traits而不是trait,是因為避免和系統(tǒng)的關鍵字。namespaceappindexcontroller;load_trait('controller/View'); load_trait('controller/Jump');classindexuse traitscontrollerView,traitscontrollerJump; publicfunctionindex()namespaceappindexcontroller;load_trait('
52、controller/View'); load_trait('controller/Jump');classindexuse traitscontrollerView; use traitscontrollerJump;publicfunctionindex()namespaceappindexcontroller;classindexuse traitscontrollerView; publicfunctionindex()那么下面的器返回值會自動轉換為json格式并返回。該請求URL地址后,最終可以在瀏覽器中看到輸出結果如下:"data":&q
53、uot;name":"","url":".cn","code":1,"message":"u64cdu4f5cu5b8cu6210"如果你需要返回其他的數據格式的話,器本身的代碼無需做任何改變。支持的數據類型html、text、json和jsonp,其他類型的需要擴展,擴展兩種方式:第式是調用Respone:tramsform第二種方式是對return_data鉤子使用行為擴展。異常處理在API開發(fā)的情況下,只需要設置好default_return_type,就能返回相應格式的異常,例如:'default_return_type'=>'json'當發(fā)生異常的時候,就會返回客戶端一個json格式的異常,例如:&q
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年跨境電商知識產權保護合同規(guī)范2篇
- 2025版協(xié)議離婚辦理指南與離婚證獲取時效標準解讀3篇
- 2025版影視基地租賃合同匯編4篇
- 2025版司機雇傭服務質量評價與獎懲合同3篇
- 二零二五年度門面租賃合同環(huán)保要求與責任4篇
- 二零二五年度2025版國有企業(yè)設備租賃合同范本4篇
- 終止2025年度勞動合同并規(guī)定經濟補償辦法3篇
- 2025年度離婚后財產分配與債務承擔協(xié)議3篇
- 2025年消防防排煙系統(tǒng)施工與消防安全風險管理合同3篇
- 2024離婚后雙方權益保障與責任劃分合同
- 中國末端執(zhí)行器(靈巧手)行業(yè)市場發(fā)展態(tài)勢及前景戰(zhàn)略研判報告
- 北京離婚協(xié)議書(2篇)(2篇)
- Samsung三星SMARTCAMERANX2000(20-50mm)中文說明書200
- 2024年藥品質量信息管理制度(2篇)
- 2024年安徽省高考地理試卷真題(含答案逐題解析)
- 廣東省廣州市2024年中考數學真題試卷(含答案)
- 內審檢查表完整版本
- 安全生產管理問題與對策探討
- 2024屆浙江寧波鎮(zhèn)海區(qū)中考生物全真模擬試題含解析
- 人教版八年級物理下冊 (功)教育教學課件
- 中藥的性能四氣五味課件
評論
0/150
提交評論