複製鏈接
請複製以下鏈接發送給好友

thinkphp

鎖定
ThinkPHP,是為了簡化企業級應用開發和敏捷WEB應用開發而誕生的開源輕量級PHP框架
ThinkPHP是一個快速、兼容而且簡單的輕量級國產PHP開發框架,誕生於2006年初,原名FCS,2007年元旦正式更名為ThinkPHP,遵循Apache2開源協議發佈,從Struts結構移植過來並做了改進和完善,同時也借鑑了國外很多優秀的框架和模式,使用面向對象的開發結構和MVC模式,融合了Struts的思想和TagLib(標籤庫)、RoR的ORM映射和ActiveRecord模式。
ThinkPHP可以支持windows/Unix/Linux等服務器環境,正式版需要PHP5.0以上版本支持,支持MySqlPgSQLSqlite多種數據庫以及PDO擴展,ThinkPHP框架本身沒有什麼特別模塊要求,具體的應用系統運行環境要求視開發所涉及的模塊。
軟件名稱
ThinkPHP
軟件平台
Windows、UnixLinux
上線時間
2006年
最近更新時間
2022年10月25日
軟件語言
PHP
開發商
ThinkPHP
軟件授權
Apache2
軟件版本
6.1.2

thinkphp產生背景

最早誕生於2006年初,2007年元旦正式更名為ThinkPHP,並且遵循Apache2開源協議發佈。ThinkPHP從誕生以來一直秉承簡潔實用的設計原則,在保持出色的性能和至簡的代碼的同時,也注重易用性。並且擁有眾多原創功能和特性,在社區團隊的積極參與下,在易用性、擴展性和性能方面不斷優化和改進。 [1] 
作為一個整體開發解決方案,ThinkPHP能夠解決應用開發中的大多數需要,因為其自身包含了底層架構、兼容處理、基類庫、數據庫訪問層、模板引擎、緩存機制、插件機制、角色認證、表單處理等常用的組件,並且對於跨版本、跨平台和跨數據庫移植都比較方便。並且每個組件都是精心設計和完善的,應用開發過程僅僅需要關注業務邏輯

thinkphp發展歷程

ThinkPHP發展歷程,無數TPer一起見證了ThinkPHP的成長:
2006年01月15日, ThinkPHP的雛形版本FCS0.6.0發佈;
thinkphp thinkphp
2006年02月12日,(元宵節)發佈FCS 0.6.1 版本,Google討論組成立;
2006年03月15日, FCS 0.7.0版本發佈;
2006年05月07日, FCS 0.8版本發佈;
2006年10月25日, FCS 0.9.0版本發佈;
2006年12月25 日,SF項目和Google網站ThinkPHP項目申請完成;
2007年01月01日, FCS正式更名為ThinkPHP;
2007年01月08日, ThinkPHP 0.9.5版發佈同期官方網站開通;
2007年02月21日, TOPThink社區暨新版ThinkPHP官方網站開通,並提供社區支持;
2007年02月25日, 發佈ThinkPHP 0.9.6版本,完成FCS到ThinkPHP的正式遷移;
2007年04月29日, ThinkPHP發佈0.9.7版本;
2007年07月01日, ThinkPHP發佈0.9.8版本;
2007年10月15 日,ThinkPHP發佈1.0.0RC1版本,完成PHP5的重構;
2007年12月15 日,ThinkPHP發佈1.0.0正式版本標誌着ThinkPHP步入軌道;
2008年10月01日, ThinkPHP發佈1.0.3正式版本;
2008年12月25 日,ThinkPHP發佈1.5正式版本並啓動商業化支持服務,ThinkPHP進入穩定發展;
2009年05月01日, ThinkPHP 發佈1.6.0RC1版本;
2009年10月01日, ThinkPHP發佈2.0版本完成新的重構和飛躍,這是一次劃時代的版本;
2012年04月05日, ThinkPHP發佈3.0版本 慶祝ThinkPHP發佈6週年;
2012年10月08日, ThinkPHP發佈3.1版本;
2012年11月11日, ThinkPHP3.1.2擴展包;
2013年05月09日,ThinkPHP發佈3.1.3完整版;
2013年12月18日,ThinkPHP發佈3.2正式版
2014年10月31日,ThinkPHP發佈3.2.2完整版 [2] 
2015年12月11日,ThinkPHP 5.0 Beta 發佈;
2017年02月27日,Thinkphp5.0.5完整版正式發佈 [3] 
2018年05月02日,Thinkphp5.1.0RC版本發佈; [4] 
2019年04月22日,Thinkphp6.0RC2版本發佈 [5] 
2019年08月16日,Thinkphp6.0RC4版本發佈 [6] 
2019年12月24日,Thinkphp6.0.1版本發佈 [7] 

thinkphp主要功能

thinkphp簡單易用

模型(M):模型的定義由Model類來完成。Model類位於項目目錄下面的LibModel目錄。
THINKPHP初始頁面 THINKPHP初始頁面
控制器(C):應用控制器(核心控制器)和Action控制器都承擔了控制器的角色,區別在於Action控制器完成業務過程,而應用控制器(App類)負責調度控制。Action控制器位於項目目錄下面的LibAction目錄。
視圖(V):模板的實現是和框架無關的,做到了100%分離,可以獨立預覽和製作。模板目錄位於項目目錄下面的Tpl目錄。

thinkphp獨創機制

ThinkTemplate是一個使用了XML標籤庫技術的編譯型模板引擎,支持兩種類型的模板標籤,使用了動態編譯和緩存技術,而且支持自定義標籤庫。其特點包括:
1)支持XML標籤庫和普通標籤的混合定義;
2)編譯一次,下次直接運行而無需重新編譯;
3)模板文件更新後,自動更新模板緩存;
4)自動加載當前操作的模板緩存文件,無需指定模板文件名稱;
5)支持編碼轉換和Content-Type更換;
THINKPHP目錄結構 THINKPHP目錄結構
6)模板變量輸出前綴支持,避免變量名稱衝突;
7)模板常量替換,無需設置模板變量;
8)支持變量組合調節器和格式化功能;
9)支持替換其它模板引擎插件使用;
10)支持獲取模板頁面內容。
內置XML模板引擎,支持標籤庫
富模型支持
聚合模型是一種虛擬模型,用於把數據表的字段抽象化,更加容易理解和操作。
可以把數據表中的某些屬性進行數據封裝,這樣就把枯燥的數據表字段賦予更好的可讀性。
靜態模型可以讓模型的數據靜態化,而不需要頻繁和數據庫打交道,可以用於不經常改變的數據表。而且ThinkPHP在ORM層上面模擬實現了數據庫的視圖功能,這是ThinkPHP獨創的一項技術,使得多表的關聯查詢具有更高的效率和可操作性,而無需定義複雜的關聯關係,讓關聯關係更加淺顯易懂。
有些時候,數據表的數據一旦添加後就不再容易變化,把這樣的模型數據靜態化,而不需要再次訪問數據庫。ThinkPHP支持靜態模型的概念,一旦把模型設置為靜態,那麼會在第一次初始化的時候獲取數據表的全部數據,並生成緩存,以後不會再連接數據庫。而只需要直接訪問模型的dataList數據即可。
3)視圖模型
ThinkPHP在ORM模型裏面模擬實現了數據庫的視圖模型,該功能可以用於多表查詢。
要定義視圖對象,需要設置viewModel為true,然後設置viewFields屬性即可。
CURD和操作高度自動化支持
ThinkPHP提供了靈活和方便的數據操作方法,不僅實現了對數據庫操作的四大基本操作(CURD):創建、讀取、更新和刪除的實現,還內置了很多實用的數據操作方法,提供了ActiveRecords模式的最佳體驗。
豐富的查詢語言支持
ThinkPHP大多數情況使用的都是對象查詢,因為充分利用了ORM查詢語言,瞭解查詢條件的定義對使用對象查詢非常有幫助,對於複雜的查詢,或者從安全方面考慮,可以使用HashMap對象或者索引數組來傳遞查詢條件。
目錄結構自動創建THINKPHP目錄結構
ThinkPHP具有項目目錄自動創建功能,需要定義好項目的入口文件,第一次執行入口文件的時候,系統會自動創建項目的相關目錄結構,如果是linux環境下面需要給項目入口文件裏面指定的路徑設置可寫權限。
ThinkPHP的模型支持主從式數據庫的連接,配置DB_DEPLOY_TYPE為1可以採用分佈式數據庫支持。
多數據庫連接和切換支持
如果需要在特殊的時候連接多個數據庫,那麼可以嘗試使用ThinkPHP的多數據庫連接特性:包括相同類型的數據庫和不同類型的數據庫。(注意:所謂的相同類型數據庫的定義是指和項目配置文件或者模型的數據庫連接的數據庫類型相同。)
ActiveRecords模式和豐富的ROR特性
ThinkPHP實現了ActiveRecords模式的ORM模型,採用了非標準的ORM模型:表映射到類,記錄(集)映射到對象,字段屬性映射到對象的虛擬屬性。最大的特點就是使用方便,從而達到敏捷開發的目的。
靈活簡單的項目配置
ThinkPHP提供了靈活的配置功能,採用最有效率的PHP返回數組方式定義,支持慣例配置、項目配置、調試配置和模塊配置,並且會自動生成配置緩存文件,無需重複解析的開銷。對於有些簡單的應用,無需配置任何配置文件,而對於複雜的要求,可以增加模塊配置文件,另外ThinkPHP的動態配置使得在開發過程中可以靈活的調整配置參數。
ThinkPHP在項目配置上面創造了自己獨有的分層配置模式,其配置層次體現在:慣例配置-->項目配置-->模塊配置-->操作(動態)配置,優先順序從右到左(在沒有生效的前提下)。
模型自動驗證和處理
系統內置了數據對象的自動驗證功能,而大多數情況下面,數據對象是由表單提交的$_POST數據創建。需要使用系統的自動驗證功能,只需要在Model類裏面定義$_validate屬性,是由多個驗證因子組成的數組,支持的驗證因子格式:驗證字段,驗證規則,錯誤提示,驗證條件,附加規則,驗證時間。
靜態頁面生成和多元化緩存機制
ThinkPHP內置了靜態緩存的功能,並且支持靜態緩存的規則定義。要使用靜態緩存功能,需要開啓HTML_CACHE_ON參數,並且在項目配置目錄下面增加靜態緩存規則文件htmls.php。
豐富的數據庫及PDO支持
SEOURL路由支持
AJAX支持
易擴展的系統基類
系統基類庫
ThinkPHP框架通過基類庫的概念把所有系統類庫都集成在一起,包括ThinkPHP的核心類庫。
基類庫分成Think核心類庫、ORG擴展類庫,在這主要介紹的是核心基類庫,核心基類庫的作用是完成框架的通用性開發而必須的基礎類和常用工具類等,包含有:
Think.Core 核心類庫包
Think.Db 數據庫類庫包
Think.Util 系統工具類庫包
Think.Template 內置模板引擎類庫包
Think.Exception 異常處理類庫包函數庫
ThinkPHP內置了一個系統公共函數庫,提供了一些系統需要的函數,系統函數庫位於ThinkPHP的Common目錄下面,名稱為functions.php。
每個項目可以定義自己的函數庫,位於項目的Common目錄下面的common.php文件。
如果項目在Common目錄下面有定義自己的common.php文件,框架會在初始化的時候自動導入,而無需自己導入。
匹配導入
Import方法是ThinkPHP內建的類庫和文件導入方法,提供了方便和靈活的類似於命名空間的文件導入機制。
自動編碼轉換
ThinkPHP框架的文件全部採用UTF-8編碼格式,UTF-8的支持和自動輸出編碼轉換的功能讓頁面表現更加靈活。可以配置輸出的頁面編碼格式,如gb2312等(默認採用UTF-8輸出)。系統根據配置文件中設置的編碼格式自動對頁面進行編碼轉換,支持iconv和mb_string兩種方式,為了提高效率,如果系統的模板編碼設置和輸出編碼設置項相同,則不會進行編碼轉換。ThinkPHP可以設置模板編碼、輸出編碼和數據庫編碼,並自動完成轉換工作,應用不再受編碼的苦惱。

thinkphp重要概念

要掌握ThinkPHP,首先要了解其中的幾個重要概念,對於熟悉Java開發的朋友,應該很容易理解下面的一些概念。
Action對象
Struts框架的Action類似,Action對象主要提供應用邏輯的控制和處理,屬於ThinkPHP的控制層,由核心的App類完成模塊和操作的解析後直接轉交給相應的Action對象處理。應用類中的所有Action對象都繼承系統的Action基類
Dao對象
是指DataAccessObject(數據訪問對象),Dao設計模式把底層的數據訪問邏輯和業務邏輯分開,夾在業務層數據層中間,用於數據庫訪問和操作。可以針對單表和多表操作。ThinkPHP中的Dao對象屬於建立在抽象數據庫訪問層之上的事務性對象。
VO對象
是指ValueObject(數據對象),更加精確的説是業務對象,因為VO對象是存活在業務層的,供業務邏輯使用的。VO對象和數據表存在一種映射關係,VO對象的每個屬性對應數據表(或者視圖)的一個字段,可以添加其他非數據表字段的VO對象屬性,以用於業務邏輯操作,例如關聯字段。VO對象有個特殊的保留屬性_info,是一個數組變量,用來保存該VO對象的一些特殊信息。和VO對象對應的概念還有PO(持久數據對象),VO和PO的概念都來自於O/RMapping(ObjectRelationalMapping,對象關係映射),PO只能用在數據層(也就是説PO對象的屬性必須和數據表一一對應),VO用在業務邏輯層表示層(可以有自己的額外屬性)。各層操作屬於該層自己的數據對象,這樣就可以降低各層之間的耦合,便於以後系統的維護和擴展。如果將PO用在各個層中就相當於使用全局變量,在OO設計非常不贊成使用全局變量。
VoList對象
在ThinkPHP框架中,把查詢後的數據集ResultSet)轉換成數據列表對象,也就是VOLIST對象,和ResultSet對象不同的是每個記錄就相當於一個VO對象。在VOLIST對象中可以方便地遍歷和操作VO對象。VO對象和VOLIST對象都屬於ThinkPHP框架中的實體對象,是數據操作的基本元素。在開發過程中沒有使用Dao模式,而是通過數據庫驅動類直接操作數據庫,那麼返回的是ResultSet對象。ThinkPHP系統提供了從ResultSet對象轉換為VOLIST對象的方法。
組件和插件
企業級的應用是離不開安全保護的,ThinkPHP以基於SpringAcegi安全系統作為參考原型,並做了簡化,以適合ThinkPHP結構,提供了一個多層的、可定製的安全體系來為應用開發提供安全控制。安全體系中主要有: 安全攔截器、認證管理器、決策訪問管理器 、運行身份管理器。

thinkphp分層架構

ThinkPHP的分層架構採用三層架構模式

thinkphp表現層

包含模板視圖、用户界面JSFlash等通過模板引擎的支持,可以使用標籤定義簡化表現層的定義工作。

thinkphp業務層

包含業務接口層、業務邏輯層、實體層、數據訪問層Action控制器作為業務接口層,提供系統各種業務操作的入口。因此,不提倡在控制器類中寫過多的業務邏輯代碼,雖然説很難嚴格控制。具體的業務邏輯應該封裝到數據訪問對象(Dao)類中實現,如果覺得過於複雜,還可以把子業務在Helper類中包裝後統一調用。業務處理過程一般會構造出業務實體對象(如Vo對象),對業務實體對象的存取通過數據訪問層完成。數據訪問層把實體對象和數據庫數據之間建立映射關係,並且封裝了通用的數據操作

thinkphp數據層

支持的數據庫有MySql、MsSql、PgSql、Oracle、Sqlite,最新版本已經提供PDO的支持,數據庫的選用和業務邏輯沒有關係。

thinkphp版本記錄

ThinkPHP 5.0正式版發佈 2016/09/15 [8] 
主要特性包括:
--------------------------------------------------------------
規範:遵循PSR-2、PSR-4規範,Composer及單元測試支持;
嚴謹:異常嚴謹的錯誤檢測和安全機制,詳細的日誌信息,為開發保駕護航
靈活:減少核心依賴,擴展更靈活、方便,支持命令行指令擴展;
API友好:出色的性能和REST支持、遠程調試,更好的支持API開發;
高效惰性加載,及路由、配置和自動加載的緩存機制;
ORM:重構的數據庫、模型及關聯,MongoDb支持;
--------------------------------------------------------------
相對於RC4版本,主要更新如下:
請求和路由:
  • Request對象支持動態綁定屬性
  • 定義了路由規則的URL原地址禁止訪問
  • 改進路由規則存儲結構
  • 路由分組功能增強,支持嵌套和虛擬分組
  • 路由URL高效反解
  • 改進Request對象param方法獲取優先級
  • 路由增加name方法設置和獲取路由標識
  • 增加MISS和AUTO路由規則
  • Route類增加auto方法 支持註冊一個自動解析URL的路由
  • 路由規則支持模型綁定
  • 路由變量統一使用param方法獲取
  • 路由規則標識功能和自動標識
  • 增加生成路由緩存指令 optimize:route
  • Request對象增加route方法單獨獲取路由變量
  • Request對象的param get post put request delete server cookie env方法的第一個參數傳入false 則表示獲取原始數據 不進行過濾
  • 改進自動路由標識生成 支持不同的路由規則 指向同一個路由標識,改進Url自動生成對路由標識的支持
  • 改進Request類 filter屬性的初始化
  • 改進Request類的isAjax和isPjax方法
  • Request類增加token方法
  • 路由配置文件支持多個 使用 route_config_file 配置參數配置
  • 域名綁定支持https檢測
  • 改進域名綁定 支持同時綁定模塊和其他 支持綁定到數組定義的路由規則,取消域名綁定到分組
  • 路由規則增加PATCH請求類型支持
  • 增加route_complete_match配置參數設置全局路由規則定義是否採用完整匹配 可以由路由規則的參數complete_match 進行覆蓋
  • 改進路由的 後綴參數識別 優先於系統的偽靜態後綴參數
  • Url類增加root方法用於指定當前root地址(不含域名)
  • 改進Url生成對可選參數的支持
數據庫:
  • 查詢條件自動參數綁定
  • 改進分頁方法支持參數綁定
  • Query類的cache方法增加緩存標籤參數
  • Query類的update和delete方法支持調用cache方法 會自動清除指定key的緩存 配合查詢方法的cache方法一起使用
  • 改進Query類的延遲寫入方法
  • Query類的column和value方法支持fetchsql
  • 改進日期查詢方法
  • 改進存儲過程方法exec的支持
  • 改進Connection類的getLastInsID方法獲取
  • 記錄數據庫的連接日誌(連接時間和DSN)
  • 改進Query類的select方法的返回結果集判斷
  • Connection類增加getNumRows方法
  • 數據庫事務方法取消返回值
  • 改進Query類的chunk方法對主鍵的獲取
  • 改進當數據庫驅動類型使用完整命名空間的時候 Query類的builder方法的問題
模型:
  • 增加軟刪除功能
  • 關聯模型和預載入改進
  • 關聯預載入查詢閉包支持更多的連貫操作
  • 完善savell方法支持更新和驗證
  • 關聯定義統一返回Relation類
  • Model類的has和hasWhere方法對join類型的支持
  • Model類的data方法 批量賦值數據的時候 清空原始數據
  • Model類的get方法第三個參數傳入true的時候會自動更新緩存
  • Model類增加只讀字段支持
  • Model類增加useGlobalScope方法設置是否啓用全局查詢範圍
  • Model類的base方法改為靜態定義 全局多次調用有效
  • Model類支持設定主鍵、字段信息和字段類型,不依賴自動獲取,提高性能
  • Model類的data方法 支持修改器
  • 改進Relation類對非數字類型主鍵的支持
  • 改進Relation類的一對多刪除
日誌和緩存:
  • 支持日誌類型分離存儲
  • 日誌允許設置記錄級別
  • 增加緩存標籤功能
  • 緩存類增加pull方法用於獲取並刪除
  • cache助手函數增加tag參數
  • 簡化日誌信息,隱藏數據庫密碼
  • 增加cache/session redis驅動的庫選擇邏輯;
  • memcached驅動的配置參數支持option參數
  • 調試模式下面 日誌記錄增加頁面的header和param參數記錄
  • memcached緩存驅動增加連接賬號密碼參數
  • 緩存支持設置complex類型 支持配置多種緩存並用store切換
  • 緩存類增加tag方法 用於緩存標籤設置 clear方法支持清除某個緩存標籤的數據
  • File類型日誌驅動支持設置單獨文件記錄不同的日誌級別
  • 改進文件緩存和日誌的存儲文件名命名規範
  • 緩存類增加inc和dec方法 針對數值型數據提供自增和自減操作
  • Cache類增加has方法 get方法支持默認值
其他:
  • 視圖類支持設置模板引擎參數
  • 增加表單令牌生成和驗證
  • 增加中文驗證規則
  • 增加image和文件相關驗證規則
  • 重定向Response對象支持with方法隱含傳參
  • 改進Session類自動初始化
  • session類增加pull方法用於獲取並刪除
  • 增加Env類用於獲取環境變量
  • Request類get/post/put等更改賦值後param方法依然有效
  • 改進Jump跳轉地址支持Url::build 解析
  • 優化Hook類
  • 應用調試模式和頁面trace支持環境變量設置
  • config助手函數支持 config('?name') 用法
  • 支持使用BIND_MODULE常量的方式綁定模塊
  • 入口文件自動綁定模塊功能
  • 改進驗證異常類的錯誤信息和模板輸出,支持批量驗證的錯誤信息拋出
  • 完善console 增加output一些常用的方法
  • 增加token助手函數 用於在頁面快速顯示令牌
  • 增加halt方法用於變量調試並中斷輸出
  • 改進Validate類的number驗證規則 和 integer區分開
  • optimize:autoload增加對extend擴展目錄的掃描
  • 改進Validate類的boolean驗證規則 支持表單數據
  • 改進cookie助手函數支持 判斷是否存在某個cookie值
  • 改進abort助手函數 支持拋出HttpResponseException異常
  • 改進File類增加對上傳錯誤的處理
  • 改進File類move方法的返回對象增加上傳表單信息,增加獲取文件散列值的方法
  • 改進File類的move方法的返回對象改為返回File對象實例
  • 增加clear和optimize:config 指令
  • 改進File類和Validate類的圖像文件類型驗證
  • 控制器的操作方法支持注入Request之外的對象實例
  • Request類 param(true) 支持獲取帶文件的數據
  • input助手函數第一個參數增加默認值
  • Validate類增加image驗證規則 並改進max min length支持多種數據類型
  • json輸出時數據編碼失敗後拋出異常
調整:
  • 廢除路由映射(靜態路由)定義
  • 取消url_deny_suffix配置 改由路由的deny_ext參數設置
  • 模型save方法返回值改為影響的記錄數,取消getId參數
  • Request對象controller方法返回駝峯控制器名
  • 控制器前置操作方法不存在則拋出異常
  • Loader類db方法增加name標識參數
  • db助手函數增加第三個參數用於指定連接標識
  • Sqlsrv驅動默認不對數據表字段進行小寫轉換
  • 移除sae驅動 改為擴展包
  • Oracle驅動移出核心包
  • Firebird驅動移出核心包
  • 取消別名定義文件alias.php
  • 配置參數讀取的時候取消環境變量判斷 需要讀取環境變量的時候使用Env類
  • 環境變量定義文件更改為 .env 由原來的PHP數組改為ini格式定義(支持數組方式)
  • 狀態配置和擴展配置的加載順序調整 便於狀態配置文件中可以更改擴展配置的參數
  • 取消域名綁定到路由分組功能
  • 控制器類的success和error方法url參數支持傳入空字符串,則不做任何處理
  • 控制器的error success result redirect方法均不需要使用return
  • 創建目錄的權限修改為0644
TinkPHP 3.2.2發佈 2014/4/15
ThinkPHP3.2.2版本在修正一些BUG後,重寫了模塊的自動生成,並支持控制器和模型的批量生成,增加了配置文件多格式支持,以及一些小的細節改進,該版本屬於小版本更新。
1、應用支持包括PHP/JSON/INI/XML/YAML以及自定義格式的配置文件;
2、支持模塊的自動生成和控制器/模型的批量生成;
3、增加插件控制器的訪問支持;
4、cookie函數增加httponly參數支持;
5、改進模型類的安全處理;
6、修正了3.2.1發佈以來社區反饋的一些BUG(詳見更新日誌);
TinkPHP3.2.1發佈 2014/2/14
相對於3.2.0版本,主要更新如下
  • 性能較比3.2.0版本提升30%;
  • 應用模塊中的類庫可以配置不使用命名空間;
  • 支持運行時Lite文件生成,用於替換應用入口文件;
  • 改進路由定義的閉包支持;
  • 增加API應用模式,更加高效;
  • 增加REST、RPC、HPROSE和YAR控制器擴展支持;
  • 增加REPL行為擴展,增強框架開發的調試手段;
  • 重寫查詢緩存功能;
  • 語言定義支持變量傳入;
  • C函數獲取配置參數支持默認值;
  • 支持操作方法綁定到類;
  • 改進和修正Image、Verify和Upload類;
  • 修正了3.2.0發佈以來社區反饋的一些BUG;
TinkPHP3.2發佈 2013/12/18
這次版本的關鍵詞是模塊化、驅動化和雲平台
模塊化:3.2版本的架構專門為模塊化設計做了優化和調整,從而更適合企業級應用,當然這很大一部分得益於對命名空間的支持以及自動加載機制。同時,會看到一個小的細節,ThinkPHP3.2版本自帶了一個應用入口文件和應用目錄。
驅動化:3.2版本在設計類庫的時候儘量採用驅動式設計,對於同一功能在不同環境和類型的操作只需要配置驅動即可輕鬆移植,不需要改變現有代碼,同時也讓應用能夠適用於更多更復雜的運行環境
雲平台:3.2版本在底層核心就包含了對各種雲平台的支持,通過定製不同的應用(場景)模式以及對應的驅動就可以輕鬆支持雲平台的部署開發,可以實現在本地開發,然後直接無縫部署到雲平台,已經支持的包括SAE和BAE3。
功能
3.2版本在此前的3.1.3版本之上,引入了命名空間,強化了驅動化和行為,增強了模塊化的概念和對雲平台的支持,並改進了諸多的細節。
主要改進包括
  • 模塊化架構的全新設計
  • 全新命名空間和自動導入機制
  • 改進的路由功能
  • 主題的動態切換支持
  • 更強大的Action參數綁定
  • 模型的參數綁定支持
  • 改進的域名部署支持
  • 全新的應用模式
  • 全新重寫的工具類(包括圖像、驗證碼和上傳等)
  • 提供更好的雲平台支持
  • 修正之前發現的眾多BUG
注意:3.2以上版本對PHP的版本要求為PHP5.3+ (不包含PHP5.3dev和PHP6
TinkPHP3.1.3發佈 2013/05/09
更新
該版本針對3.1.2進行了一些改進和完善,主要包括:
改進異常處理,支持致命錯誤捕獲
針對PDO驅動和Sqlsrv驅動的完善,支持參數綁定;
增加變量安全獲取和過濾的快捷方法I;
分組支持部署到完整域名IP
A和D方法支持跨分組調用;
改進模版引擎的定界符對特殊字符的支持;
修正JS代碼可能對模版標籤的混淆;
模型的where方法支持多次調用;
默認關閉頁面壓縮輸出;
異常日誌的紀錄;
Action類的assign方法支持連貫操作;
數據庫錯誤信息包含錯誤代碼
修正上一版本的一些BUG;
TinkPHP3.1.2發佈 2012/11/17
[更新] [9] 
獨立分組功能
模板繼承
模塊和操作映射
AJAX增加jsonp格式支持
分組支持單獨配置默認模塊和操作
核心編譯過程的優化
SAE引擎升級
改進的分頁類
修正查詢語言的一處安全隱患
ThinkPHP 3.1發佈 2012/09/03
[更新]
更加安全的防護和過濾體系
MVC多層支持
Action參數綁定支持
模型命名範圍支持
查詢條件和SQL預處理功能
動態設置自動驗證和自動完成支持
更加靈活強大的緩存管理方法
日誌記錄簡化、增加IP支持
致命錯誤的捕獲機制完善
頁面Trace機制改進和分類顯示支持
超過128項更新
ThinkPHP 3.0.1 開發版
2012-04-05
[更新]
Action參數綁定支持
模型類命名範圍支持
全局系統變量安全過濾支持
增加IS_GET IS_POST IS_PUT 等請求類型常量
日誌記錄改進 優化日誌大小 增加IP記錄
U函數對子域名部署的增強和優化
模型類增加filter連貫操作方法 用於對數據的安全過濾
模型類的data方法支持獲取當前數據對象
Action類增加_param方法支持 可以自動根據當前提交類型 獲取參數
Action類的_get _post方法支持多函數過濾
改進ajaxReturn方法
改進success和error方法
增加自動驗證的規則
分組模式下模型分組可以自動加載
模型類增加close方法 驅動類支持多數據庫連接關閉
模型類增加表單提交字段合法性檢測 配置insert_fields 和 update_fields
模型強制進行數據字段類型驗證
增加DB_SLAVE_NO配置參數 用於指定讀服務器的序號
優化模型的create方法的數據對象生成
自動驗證的function和callback規則支持多字段
[3.0版本]2012-3-23
[修正]
修正視圖模型擴展的checkOrder方法
修正U方法對默認分組的完善
修正Redis緩存類
修正sqlsrv驅動
修正模式擴展中的Model類
修正模型的where方法傳人空參數的時候導致delete方法刪除全部數據的問題
修正路由定義的大寫被強制轉換小寫的錯誤
修正靜態緩存讀取行為擴展
修正Pgsql驅動
修正S方法的緩存有效期
修正Mongo驅動類
[刪除]
取消path_info標籤擴展位置
取消TAG_NESTED_LEVEL配置參數,該參數已經無效
取消CheckTemplate行為擴展 併入核心App類的init方法
[增加]
App類增加action_name 行為標籤位置 用於改變操作方法名
增加引擎擴展 SAE納入第一個引擎擴展
增加ENGINE_PATH常量定義 用於引擎擴展使用
增加PATH_INFO的兼容判斷功能
增加URL_PATHINFO_FETCH配置參數
增加FireShowPageTrace行為擴展 能將Trace信息輸出到火狐的firebug
增加Wincache緩存擴展驅動
[完善]
SAE引擎代碼優化
優化ThinkPHP入口文件
改進模塊名的安全檢測 取消異常拋出改成引導到空模塊環節
改進Widget類的template屬性處理,不區分大小寫 方便定義
模型的field方法支持 field(true) 用法 表示獲取數據表的全部字段 (而不是*)
改進對mysql驅動的關鍵字處理方法parseKey
改進MongoDb驅動對讀寫分離的支持
改進模板引擎的標籤別名解析 別名可以無需要定義解析方法
改進Db和sqlite緩存驅動類對有效期參數的判斷
規則路由定義支持完整匹配
改進模板檢測的自定義模板目錄支持
[調整]
系統調試模式配置文件關閉模板緩存
模板字符串替換定義TMPL_PARSE_STRING區分大小寫
配置參數只支持一級不區分大小寫 二級以下配置參數區分大小寫調用
行為日誌記錄類型改為Log::INFO 類型,方便通過配置文件 單獨關閉相關行為日誌顯示和記錄
checkLang行為擴展調整語言包命名規範調整 項目公共語言包 common.php 分組語言包 分組名.php 模塊語言包 分組名_模塊名.php 或者 模塊名.php
[2.1版本]2011-4-30
這次的重點更新是在核心應用上的改造和效率方面的提升,主要體現在:
URL路由靈活模式,支持常規路由定義,正則路由匹配
對比2.0版本,新的路由模式更體貼和應用更方便,同時在執行效率上也得到了更簡潔而有效的處理。最重要的是定義路由將更簡單和直接,並且可選擇使用獨立文件定義或是直接配置定義。
2.1版本對分組模式完善了細節流程上的解析機制,增加了實用的常量定義和模板替換,同時添加了對二級域名的友好支持,對項目部署提供了更多方便
ThinkPHP內置模板引擎捨棄了原來xml模式的解析,直接改由類屬性進行定義標籤,既減少了文件加載,提升瞭解析效率,在自定義標籤和標籤擴展上,也更加簡單和方便了
允許項目指定編譯緩存文件定義
系統函數庫functions列入核心編譯文件,不再默認綁定到核心編譯
以上兩項更新雖微,但實際上意義非凡,對於多項目多應用同時部署架構時會起到非常重要的作用,核心的自由度更寬更廣了。
改進tag函數,插件機制可以直接定義要執行的行為
 項目初始化提供新的可自定義的部署模式
允許自定義項目首次運行時的訪問處理方式,系統由原來的簡單成功提示,改為探針模式友好提示,對於使用ThinkPHP部署的項目,在初始運行時將方便地提供服務器相關信息,對是否支持ThinkPHP運行環境進行探測並報告和提出建議。
提供AMF模式支持
 提供PhpRPC模式(感謝vanvvdot提供擴展)
 lite模式增強,支持使用內置模板引擎
 數據插入時允許進行更新操作
 提供了更簡潔的連貫操作方式的數據庫切換
 新增模板常量、變量定義等實用標籤
 其它一些應用細節處理可對比svn更新記錄
 Images圖像類恢復圖片水印支持
 Model類恢復批量插入數據的addAll方法
 優化項目核心運行進程細節,去掉不常用功能
 優化系統進程統計處理,提供G函數可進行記錄和統計
 完善了多語言在各服務器環境下的兼容性統一
 完善了RelationModel方法兼容問題
 完善了序列化字段處理
 完善了數據編輯的時候唯一檢測的驗證
 增加是否記錄異常信息日誌開關 LOG_EXCEPTION_RECORD
 去除了原svn上的二級域名支持
 去除了原svn上的前後置判斷處理
 去除了個別不通用功能和配置
 去除了URL重定向處理,減少HTTP請求的同時,也避免了因此帶來的一些錯誤。
 對於以上已去除的功能開關不再生效
[1.0.4 版本] 2008-5-16
修正關聯寫入和數據字段過濾的衝突
修正哈希子目錄緩存方式
模塊配置文件命名改為:模塊名+_config.php
修正Compare標籤
修正CX標籤庫的判斷標籤
修正模板引擎的IF標籤的條件BUG
修改多數據庫連接和切換機制,取消addConnect方法的eqType參數,避免了因來回切換的時候的錯誤
修正Db緩存和Sqlite緩存的數據過期判斷
增加項目配置檢測,如果項目配置文件發生修改,則重新生成編譯項目緩存。
增加跳轉頁面模板和404模板配置配置方式和Action類的display方法templateFile參數一致,默認配置: 'ACTION_JUMP_TMPL'=> 'Public:success', 'ACTION_404_TMPL'=> 'Public:404'
Action類增加404操作方法頁面跳轉操作和404操作支持模板文件配置
修正html標籤庫的link和import標籤
增加數據查詢的IS NULL 和 IS NOT NULL支持
修正連貫操作的一些警告錯誤
完善join分析 支持left right等方式
修正模板引擎在開啓短標籤的情況下無法正常輸出xml標識的問題
修正ORG.Date.Date類的maxDayOfMonth方法
完善多數據庫連接的切換
修改命令行自動創建工具build
修正連貫操作的field方法的判斷錯誤
修正Db類的一處where條件判斷的小問題
rand_string加上中文隨機字符串生成
修正兼容方法json_encode對布爾值的判斷
修正ArrayList類的addall方法
修正max min avg sum等查詢方法返回浮點型數據錯誤的問題
修正數組方式查詢的自己使用Like問題
iterate標籤增加mod屬性,用於計算循環變量的取模替換原來的odd屬性
增加Input類,用於輸入數據管理
刪除已經廢棄的目錄檢查插件
優化模板引擎解析,避免多次實例化模板解析類並簡化模板解析類的寫法,去掉架構方法定義
修改mobile驗證的正則
增加了分頁類關於負數的判斷
部分CX標籤的屬性可以支持特殊模板變量
F方法生成的文件會自動加上THINK_PATH判斷,避免直接執行
取消了當指定模塊和操作不存在的時候執行默認模塊和默認操作,由用户自己定義空模塊和空操作來處理。
增加了連貫操作的data方法,用於指定要操作的數據
去掉了已經廢棄的三個配置參數:DB_CACHE_ON DB_CACHE_TIME DB_CACHE_MAX
增加表單提交的MAGIC_QUOTES_GPC判斷
model類的query和execute方法支持使用__TABLE__字符串系統會自動替換成當前模型對應的表名
調整了空操作和直接判斷模板文件的順序空操作優先執行
修正Cookie類支持關閉瀏覽器就失效的情況設置COOKIE_EXPIRE為0或者空字符串或者在使用的時候傳遞參數0 Cookie::set($name,$value,0);
項目編譯緩存文件也加上是否去掉註釋的開關
[1.0.3 版本] 2008-3-16
增加空模塊支持 如果指定的模塊不存在會首先定位是否存在Empty模塊
增加核心編譯文件的去除空白和註釋的開關,在入口文件定義 STRIP_RUNTIME_SPACE 常量為false 可以關閉去除空白和註釋
Action緩存由原來的userCache成員屬性控制改為項目參數 ACTION_CACHE_ON 控制,便於動態控制
增加數據庫字段緩存的開關 慣例配置增加DB_FIELDS_CACHE 用以設置數據庫字段是否緩存,默認進行緩存
修正xcache和sqlite緩存方式的讀寫次數記錄
使用視圖模型的時候,如果主鍵是id,不需要再定義getPk方法
修正多語言和多模板的cookie問題
入口文件免設置APP_NAME APP_PATH
完善Cookie類
修正模板檢查的時候組件化的支持
模型類的查詢操作支持連貫方法
去掉了一些廢棄的慣例配置參數,包括:DATA_CACHE_ON 和 DATA_CACHE_MAX
慣例配置增加了DATA_CACHE_SUBDIR參數控制文件緩存方式是否自動使用子目錄哈希緩存
在項目根目錄不存在的情況下自動創建
完善對跨庫查詢的支持
目錄自動創建支持寫入安全文件
[ 1.0.2 ] 2008-2-21
Model類增加toArray方法
修正因Log類的改動導致Trace錯誤信息無法正常顯示的問題
數據查詢返回的數據集由ArrayObject對象改成數組
修正Model類的create方法在定義字段映射的下面的bug
修正虛擬模型下面create方法的bug
Model類的facade方法增加數據表字段的檢測
優化Image類的showAdvVerify方法
修正標籤庫的compare標籤
Trace配置文件由原來的_trace.php更名為trace.php
項目調試配置文件由原來的_debug.php更名為debug.php
項目配置文件由原來的_config.php更名為config.php
路由定義文件由原來的_routes.php 更名為 routes.php
靜態定義文件由原來的_htmls.php 更名為 htmls.php
Model類的create方法無需type參數,自動判斷新增和編輯模型數據
增加第一次運行目錄自動生成功能(只需要定義入口文件)
默認項目編譯緩存目錄為Temp目錄
[ 1.0.1 ] 2008-2-2
修正Db類在Oracle下面的parseLimit方法判斷
優化數據庫驅動類的查詢結果獲取
Model 類增加字段的表達式插入和更新支持
完善了Db類的條件查詢字段中帶有空格的處理
Model類增加了delConnect方法用於刪除動態增加的數據庫連接
增強了分佈式數據庫的支持 可以設置是否需要讀寫分離
Model類增加智能切換功能 switchConnect方法可以自動識別是否是相同的數據庫連接類型
增加了組件模塊的URL分割定義配置 COMPONENT_DEPR 包括對操作鏈的設置採用相同的參數定義
修正Model類的count等統計方法會自動緩存的問題 DB類默認關閉查詢緩存
修正RBAC組件的權限判斷
修正組件模塊方式下面的模板文件../Public的替換
修正Html標籤庫的list標籤的actionlist屬性的支持
修正PDO類在某些數據庫下面的getAll方法的BUG
增加核心緩存文件的開關功能 在入口文件裏面設置 CACHE_RUNTIME 為 false
修正了使用組件模塊的時候模板文件中__URL__的解析問題
修正模板和語言的切換cookie
Model類增加addConnect和switchConnect方法 用於支持多數據庫的連接
修正了語言包的緩存導致切換語言無效的問題
Db類增加多數據庫連接的內置支持
修正Model類在某些數據庫下面where條件表達式不支持where 1 的情況
Db類增加getLastSql方法用於獲取最後一次查詢的sql語句
完善Log類的操作以及優化錯誤日誌的寫入
修正model的數據庫連接配置讀取
ajax返回之前保存日誌記錄
完善compare標籤
改進Vendor函數的baseUrl參數定義
改進項目語言包的定義 不同語言分成不同子目錄
簡化了query方法的數據庫緩存
增加clearCache方法,用於清空項目相關緩存目錄
增加firebird數據庫驅動支持
修正pgsql驅動
修正 app.php 文件的編譯緩存路徑的問題
增加編譯緩存路徑的設置 RUNTIME_PATH
[ 1.0.0 ] 2007-12-25
優化了執行效率和內存開銷
Import方法增加同名檢測和類檢測
完善PHP 5.2.0以下版本的支持
去掉了核心對Config、Language、Cookie和Session類庫的依賴
去掉了Action類內置的默認操作
改進了MySqli的驅動類庫
修正了主鍵不是自動增長的時候Model的add方法返回錯誤
修正了mysqliescape_string方法
修正了PDO的連接params參數問題
修正了Model的findAll的關聯查詢問題
修正了Model類的getModelName方法問題
修正了RBAC的模塊大小寫設置
去掉volist resultset標籤,均作為iterate標籤的別名
增加了項目編譯機制和核心類庫編譯機制
標籤庫定義增加標籤的別名定義
XML模版結束標籤增加對空格的支持
增加compare標籤和eq neq gt egt lt elt heq 和nheq標籤別名
增加了多模版和多語言的開關
RBAC認證增加了操作的認證設置,之前只支持模塊的認證設置

thinkphp開源項目

  1. ThinkSNSThinkSNS 基於許多優秀的開源軟件開發,提供全方位的社交網絡(SNS)解決方案。ThinkSNS源於辦公圈項目,WEB端基於國內技術領先的ThinkPHP框架開發,另外還有IM客户端軟件。ThinkSNS全部基於開源項目,同時也作為開源項目,免費提供給用户使用。 [10] 
  2. OneThinkOT是ThinkPHP官方發佈的內容管理框架;OneThink以其便捷的建站、豐富的擴展、靈活的二次開發,以及雲服務的支持。 [11] 
  3. ThinkCMFThinkCMF是由第三方團隊開發的中文內容管理框架;ThinkCMF是一款基於PHP+MYSQL開發的中文內容管理框架。ThinkCMF提出靈活的應用機制,框架自身提供基礎的管理功能,而開發者可以根據自身的需求以應用的形式進行擴展。每個應用都能獨立的完成自己的任務,也可通過系統調用其他應用進行協同工作。在這種運行機制下,開發商場應用的用户無需關心開發SNS應用時如何工作的,但他們之間又可通過系統本身進行協調,大大的降低了開發成本和溝通成本。。 [12] 
  4. tpflowtpflow基於thikphp 5.1 開發的符合快速設計理念的工作流組件。

thinkphp所獲榮譽

2012年度最受歡迎中國開源軟件第二名 [13] 
參考資料
展開全部 收起