上次写了U函数,今天就把I函数的源码解读和流程图记录下来,作为分享,顺便会对使用稍微做一些解释。
一 、函数使用方法:
参数1:$name
这个传递的是要过滤的变量名,里面可以包含数据来源方式method和数据类型type 格式为 method.name/type 例如 post.pram/s
method的方式非常多,具体最好参看源码,这里不具体说了。
要注意这里规定过滤数据的type后,会使用对应的强制转换,例如type为int,则用(int)方式进行转换。如果规定的type在I函数内不存在,则默认强制转换成字符串
type对应 a为数组 b为布尔 d为整形数 f为浮点数
参数2:$default
这个传递的是默认值,如果过滤后的变量不存在,则返回该默认值
参数3:$filter 默认为null
这个传递的是过滤的多个函数或者filter_id以及正则表达式
一个或多个函数:字符串格式多个函数用,隔开,还可以用数组方式,多个函数会循环进行过滤,且过滤的数据可以是多维数组,因为可以递归过滤,另外因为多个函数是循环进行过滤,所以过滤的顺序也是按照循环的顺序进行,所以要注意多个过滤函数的顺序放置。
正则表达式: /表达式/ 正则表达式的过滤方式不能进行递归,所以过滤的数据不能是数组
filter_id形式:整型的int类型或者数组类型都可以,最后用filter_var根据filter_id对应的过滤方式进行过滤,该种方式也是不进行递归的,所以过滤的数据不能是数组
参数4:$datas 默认为null
这个传递参数用来补充method中的data方式,是传递获取额外数据源的数据给过滤变量的
二、I函数运行流程图
三、I函数源码解读:
/**
* 获取输入参数 支持过滤和默认值
* 使用方法:
* <code>
* I('id',0); 获取id参数 自动判断get或者post
* I('post.name','','htmlspecialchars'); 获取$_POST['name']
* I('get.'); 获取$_GET
* </code>
* @param string $name 变量的名称 支持指定类型和method
* 格式 get.cc/d get为method cc为变量名称 d为指定数据类型
* @param mixed $default 不存在的时候默认值
* @param mixed $filter 参数过滤方法 可以是函数名,也可以是int类型指定filter_var里的过滤id
* @param mixed $datas 要获取的额外数据源
* @return mixed
*/
function I($name,$default='',$filt