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不支援;
四、助手函式