5.0版本和之前版本的差異較大,本篇對熟悉3.2版本的用戶給出了一些5.0的主要區別。 
        
 
         
         URL和路由 
        
 
         
         5.0的URL訪問不再支持普通URL模式,路由也不支持正則路由定義,而是全部改為規則路由配合變量規則(正則定義)的方式: 
        
 
         
         主要改進如下; 
        
 
         
         增加路由變量規則; 
        
 
         
         增加組合變量支持; 
        
 
         
         增加資源路由; 
        
 
         
         增加路由分組; 
        
 
         
         增加閉包定義支持; 
        
 
         
         增加MISS路由定義; 
        
 
         
         支持URL路由規則反解析; 
        
 
         
         請求對象和響應對象 
        
 
         
         5.0新增了請求對象Request和響應對象Response,Request統一處理請求和獲取請求信息,Response對象負責輸出客戶端或者瀏覽器響應。 
        
 
         
         
         
         模塊和控制器 
        
 
         
         控制器的命名空間有所調整,並且可以無需繼承任何的控制器類。 
        
 
         
         應用命名空間統一為app(可定義)而不是模塊名; 
        
 
         
         控制器的類名默認不帶Controller后綴,可以配置開啟use_controller_suffix參數啟用控制器類后綴; 
        
 
         
         控制器操作方法采用return方式返回數據 而非直接輸出; 
        
 
         
         廢除原來的操作前后置方法; 
        
 
         
         增加beforeActionList屬性定義前置操作; 
        
 
         
         支持任意層次的控制器定義和訪問; 
        
 
         
         URL訪問支持自動定位控制器; 
        
 
         
         數據庫 
        
 
         
         5.0的數據庫查詢功能增強,原先需要通過模型才能使用的鏈式查詢可以直接通過Db類調用,原來的M函數調用可以改用db函數,例如: 
        
 
         
         
         
         3.2版本 
        
 
         
         M('User')->where(['name'=>'thinkphp'])->find(); 
        
 
         
         5.0版本 
        
 
         
         db('User')->where('name','thinkphp')->find(); 
        
 
         
         主要改進如下: 
        
 
         
         支持鏈式查詢操作; 
        
 
         
         數據查詢支持返回對象、數組和PDOStatement對象; 
        
 
         
         數據集查詢支持返回數組和Collection對象; 
        
 
         
         增加查詢構造器,查詢語法改變; 
        
 
         
         支持閉包查詢; 
        
 
         
         支持分塊查詢; 
        
 
         
         支持視圖查詢; 
        
 
         
         增加SQL監聽事件; 
        
 
         
         模型 
        
 
         
         5.0的模型變化是最大的,基本上模型是完全面向對象的概念,包括關聯模型,模型類的后綴不再帶Model,直接由命名空間區分,原來的D函數調用改為model函數,並且必須創建對應的模型類,例如: 
        
 
         
         3.2版本 
        
 
         
         D('User')->where(['name'=>'thinkphp'])->find(); 
        
 
         
         5.0版本 
        
 
         
         model('User')->where('name','thinkphp')->find(); 
        
 
         
         
         
         主要改進包括: 
        
 
         
         重構關聯模型; 
        
 
         
         支持聚合模型; 
        
 
         
         廢除視圖模型(改為數據庫的視圖查詢方法); 
        
 
         
         模型的擴展采用Trait機制; 
        
 
         
         增加獲取器和修改器; 
        
 
         
         增加時間戳自動寫入; 
        
 
         
         增加類型字段轉換; 
        
 
         
         數組訪問支持; 
        
 
         
         JSON序列化支持; 
        
 
         
         自動驗證和自動完成 
        
 
         
         5.0的數據自動驗證和自動完成和3.2版本區別較大,5.0的數據驗證采用驗證器定義並且通過think\Validate類進行統一的驗證。自動完成則通過在模型里面定義修改器來完成。 
        
 
         
         異常 
        
 
         
         5.0對錯誤零容忍,默認情況下會對任何級別的錯誤拋出異常(但可以在應用公共文件中設置錯誤級別),並且重新設計了異常頁面,展示了詳盡的錯誤信息,便於調試。 
        
 
         
         
         
         調試和日志 
        
 
         
         5.0的頁面Trace強化,支持瀏覽器控制台查看Trace信息。 
        
 
         
         5.0的日志驅動增加Socket方式,采用SocketLog支持遠程調試。 
        
 
         
         常量 
        
 
         
         5.0版本廢棄了原來的大部分常量定義,僅僅保留了框架的路徑常量定義,其余的常量可以使用App類或者Request類的相關屬性或者方法來完成,或者自己重新定義需要的常量。 
        
 
         
         廢除的常量包括: 
        
 
         
         REQUEST_METHOD IS_GET IS_POST IS_PUT IS_DELETE IS_AJAX __EXT__ COMMON_MODULE MODULE_NAME CONTROLLER_NAME ACTION_NAME APP_NAMESPACE APP_DEBUG MODULE_PATH 
        
 
         
         函數 
        
 
         
         5.0版本核心框架不依賴任何自定義函數,但仍然封裝了一些常用功能到助手函數,你可以隨意重新定義或者增加助手函數。