1. 程式人生 > >tp3.x和tp 5的區別

tp3.x和tp 5的區別

 由於TP5.0是一個全新的顛覆重構版本,所以現在面試很多面試官喜歡問TP3.2和TP5之間的區別,那他們之間到底有哪些區別呢?
一、目錄
 
 
TP5目錄


二、需要摒棄的 3.X 舊思想

模型的變動
       新版的模型查詢返回預設‘物件’,系統預設增加了'toArray'方法,許多開發者在'all'或'select'嘗試使用'toArray'來 轉換為陣列,但是'all'或'select'結果是物件的陣列集合,是無法使用'toArray'進行轉換的,如果你強行使用foreach進行轉換,後期會增加很多操作,也會出現很多意想不到的bug。所以我們在開發的時候,要去理解‘物件’的概念,嘗試使用‘物件’進行資料的使用。


三、TP5新版的變化
命名規範

    目錄和檔名採用‘小寫+下劃線’,並且以小寫字母開頭;
    類庫、函式檔案統一以.php 為字尾;
    類的檔名均以名稱空間定義,並且名稱空間的路徑和類庫檔案所在路徑一致(包括大小寫);
    類名和類檔名保持一致,並統一採用駝峰法命名(首字母大寫)

函式

    系統已經不依賴任何函式,只是對常用的操作封裝提供了助手函式;
    單字母函式廢棄,預設系統載入助手函式;

路由
        5.0 的 URL 訪問不再支援普通 URL 模式,路由也不支援正則路由定義,而是全部改為規則路由配合變數規則(正則定義)的方式。
控制器
        控制器的名稱空間有所調整,並且可以無需繼承任何的控制器類。

    應用類庫的名稱空間統一為 app(可修改)而不是模組名;
    控制器的類名預設不帶Controller字尾,可以配置開啟controller_suffix引數啟用控制器類字尾;
    控制器操作方法採用return方式返回資料,而非直接輸出;
    廢除原來的操作前後置方法;



控制器版本對比
tp3

 
tp5
 




       TP3.2控制器命名必須以Controller.class.php結尾,而TP5是以.php結尾;
       TP3.2控制器模版輸出使用$this->display()方法,而在TP5中如果繼承基礎控制器使用$this->fetch()方法,沒有繼承使用view()助手函式即可;
模型
        5.0 的資料庫查詢功能增強,原先需要通過模型才能使用的鏈式查詢可以直接通過 Db 類呼叫,原來的 M 函式呼叫可以改用 db 函式,例如:
3.2 版本
M('User')->where(['name'=>'thinkphp'])->find();
5.0 版本
db('User')->where('name','thinkphp')->find();
新版的模型查詢增加了靜態方法,例如:



系統常量的廢棄
         對於TP3.2,TP5廢棄了很多的常量,如果開發這有需求可以自定義,有些常量的功能可以通過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

        
模型
       TP5支援think命令建立控制器模型,而TP3.2不支援;

四、助手函式