這篇文章主要介紹CI核心框架工具類CI_URI。html
該類主要用來解析uri和決定路由的。關於URI和URL的關係請參考這位朋友的文章。簡單來講URI是惟必定位的資源,URL是惟一資源的一個網絡可能訪問路徑。因此從這個角度來看,做者在定義類名的時候仍是很是嚴謹的,由於因爲解析路由的存在,同一個資源可能有多個訪問路徑。nginx
該構造函數,主要針對enable_query_strings=true的狀況做出一些處理。web
舉例說明:apache
1)當值爲true時候,URL爲:http://example.com?a=me&b=something&c=here數組
2)當值false的時候,URL爲:http://example.com/me/something/here服務器
由於在大多數狀況下,咱們會把enable_query_strings設爲false。網絡
在構造函數中,就是針對設爲false的時候,針對'REQUEST_URI'和‘QUERY_STRING‘ 兩種protocol(規則) 分別處理uri。框架
當protocol參數的值是‘REQUEST_URI‘時候,採用該函數解析uri。ide
一系列的操做,清理並得出不含‘/’相對路徑,例如:http://47.100.9.155/skin/index/start?a=1 返回的uri 是 index/start。函數
兩一個操做是清理和設置$_SERVER['QUERY_STRING']的值,而且把相應的參數存入$_GET數組中。
當protocol參數的值是‘QUERY_STRING‘時候,採用該函數解析uri。
這個函數與_parse_request_uri的區別是採用$_SERVER['QUERY_STRING']的值來獲取uri,而且返回。到底採用_parse_request_uri方法或者_parse_query_string方法來獲取uri是由web服務器(如apache,nginx等)的路由配置來決定的。
該函數是protect 屬性,意味着它不能被外部直接調用,只能被內部調用或者被子類繼承調用。在這裏,暫時只是被構造函數調用。
該函數主要作了如下的事情:
1)移除不可見的字符,和多餘的/;
2)若是有以前在框架中設置了文件名後綴,在這裏將其移除;好比有多是一個example文件,非要假裝成靜態文件example.html,在這裏會將.html去除掉;
3)將各參數挑出來並過濾後存入segments[]數組。
剩下的一些公共函數主要是對uri的一些獲取操做,能夠參考官方漢化後的文檔:https://codeigniter.org.cn/user_guide/libraries/uri.html。