URI类的作用主要是处理地址字符串,将URI分成对应的片段保存到segments,路由类也主要是通过segments数组来获取上下文中的URI请求信息 。
1. URI类是如何将地址字符串解析成对应片段?
答:URI类首先将URL字符串解析成URI字符串,URI字符串的格式则是我们已经非常熟悉的CI路由地址(查询字符串,SCRIPT_NAME,以及SCRIPT_NAME目录名不会出现在uri字符串中),然后再将URI字符串中的参数解析出来存储到segments数组中,这样就讲url解析成对应的片段了。
2. 解析后的对应片段保存到变量中是怎样的数据结构?
答:解析出来的片段从下标1开始依次保存到segments数组中。
1.__construct()构造函数
URI类在初始化的时候就会对地址进行解析,构造函数会根据不同的环境调用对应的解析函数,并保存解析结果。 cli模式:调用_parse_argv()进行解析 根据uri_protocol这个配置属性决定使用哪个解析函数 默认REQUEST_URI,使用_parse_request_uri解析函数 QUERY_STRING,使用_parse_query_string解析函数 PATH_INFO或其他参数,都使用_parse_request_uri解析函数 这些解析函数会将地址解析成uri字符串,再由_set_uri_string函数将uri字符串解析成对应片段
2.命令行模式下_parse_argv()解析函数
这个uri字符串解析数组,是从$_SERVER[‘argv’]中获取参数
3._parse_request_uri()解析函数
从$_SERVER[‘REQUEST_URI’]中获取参数
4._parse_query_string()解析函数
根据$_SERVER[‘QUERY_STRING’]的参数解析出字符串
5._remove_relative_directory()——去掉多余斜杠和相对路径符号
6.uri解析成对应分段——_set_uri_string()函数
前面解读的几个函数已经将url解析成uri字符串了,但是我们最终需要的是Uri字符串所对应的参数,这样才能根据uri参数路由到正确的位置,set_uri_string()函数的功能便是将uri字符串解析成对应分段
7.合法性保障——filter_uri函数