看这一部分之前不妨先看一下confing里的设置。在config里有一项设置是
$config['uri_protocol'] = 'AUTO';
默认是AUTO
,可以设置成AUTO
、PATH_INFO
、QUERY_STRING
、REQUEST_URI
、ORIG_PATH_INFO
五种方式。URI类中的主要方法_fetch_uri_string
就是围绕这个设置展开的。
CI本身支持CLI方式访问(虽然我还没有看到CLI的用处~~)。
而在这个文件中,我们还看到除了前六个函数,其他每个函数都是成对出现的,带
r
和不带r
的,也就是正序和倒序两种方式。不得不说CI考虑的很周全。
-
获取并设置URI字符串
这个里面其实内容不多,主要是用到
$_SERVER
这个超全局变量,对字符串做出一些操作。如果在config
里设置的是AUTO
方式的话,就会去检测到底使用了那种方式。(所以从效率上来讲我们是不是应该明确指定使用何种方式呢?);其实这里主要涉及到的还是我们常规使用的通过浏览器访问和CLI模式的访问至于CLI和常规情况的区别,应该是在参数的接收上(这只是我的理解~~)。如果是CLI模式,则调用
_parse_cli_args
来解析参数,常规方法则通过_detect_uri
来处理。 -
解析URI并赋值
_detect_uri
和上一个函数里都涉及到很多$_SERVER
这个超全局变量是很值得学习的。而且在整个CI里使用正则表达式的地方也很多。(这似乎是很多优秀的web框架和库的通俗做法?jQuery也是)。 -
过滤不安全字符
_filter_uri
同样是通过正则表达式。%28
->(
,不太明白这个是为什么。十六进制转十进制的UTF-8? -
其余的一些对URI字段的操作
可以看到剩下的函数都很短。但也正是精华之所在。在框架内写代码时取得URI或者segment的做法都是通过这些短函数了。避开直接操作的函数。最重要的是,如果是我去写一个函数,我可能每次都会去读取一遍URI,这样实际上就做了很多无用功。
这一个类其实不难看懂,但是我看了很久,也不知道该从哪儿开始去写笔记。看这个框架,看到更多的是思想。