think php i函数,Thinkphp中的 I 函数(Thinkphp3.2.3版本)

I 函数的作用是获取系统变量,必要时还可以对变量值进行过滤及强制转化,I 函数的语法格式:

I('变量类型.变量名/修饰符',['默认值'],['过滤方法或正则'],['额外数据源'])

一、获取变量

在PHP中获取变量值的方法有很多,比如:$_GET['变量名'],$_POST['变量名'],$_SESSION['变量名'],$_COOKIE['变量名'],$_SERVER['变量名'] 都可以获取相应的变量值,但在thinkphp中为了安全的原因建议统一使用 I 函数来获取变量值。例如:获取 URL 地址栏中参数 id 的值,在php中我们用 $_GET['id'] 来获取,在thinkphp中我们可以用I('get.id')来获取。同样的, $_POST['id'] 就用I('post.id')取代,I 函数的语法格式中的变量类型就是指的像 get 和 post 之类的请求方式,类似的变量

类型还包括:

变量类型

含义

get

获取GET参数

post

获取POST参数

param

自动判断请求类型获取GET、POST或者PUT参数

request

获取REQUEST 参数

put

获取PUT 参数

session

获取 $_SESSION 参数

cookie

获取 $_COOKIE 参数

server

获取 $_SERVER 参数

globals

获取 $GLOBALS参数

path

获取 PATHINFO模式的URL参数

data

获取 其他类型的参数,需要配合额外数据源参数

如果要获取的变量类型是get、post 或 put,可以统一用 param 变量类型,param 变量类型是框架特有的支持自动判断当前请求类型的变量获取方式,例如:I('param.id') ,如果当前请求类型是GET,那么等效于 $_GET['id'],如果当前请求类型是POST或者PUT,那么相当于获取 $_POST['id'] 或者 PUT参数id。而事实上当 I 函数获取的变量类型是param时变量类型可以省略直接写为:I('变量名') ,那么 $_GET['id']、$_POST['id'] 都可以简写为:I('id') 。但当变量类型为其他类型时就不能这么简写,比如 I('cookie.id')、I('session.id')就不能简写。

注意:I 函数的变量类型不区分大小写,但变量名严格区分大小写,比如 I('get.id') 可以写成 I('GET.id'),但不能写成 I('get.ID')。

二、变量过滤

I 函数本身默认的过滤机制是 htmlspecialchars,因为在配置文件中配置了:

// 系统默认的变量过滤机制

'DEFAULT_FILTER' => 'htmlspecialchars'

所以 I('post.变量名') 就等同于 htmlspecialchars($_POST('变量名')),如果 I 函数自身带了过滤方法,则用自身带的过滤机制过滤变量,比如:

I('post.email','请输入正确的email地址',FILTER_VALIDATE_EMAIL);

表示会对$_POST['email'] 进行格式验证判断是否符合 email 的格式要求,如果不符合的话,返回提示信息。上面的代码也可以简化:

I('post.email','请输入正确的email地址','email')

请注意,上面的 FILTER_VALIDATE_EMAIL 是不带引号的,下面的 email 是带引号的。

像上面 email 那样简写的过滤方法名必须是 filter_list方法中的有效值(不同的服务器环境可能有所不同),可能支持的包括:

int

boolean

float

validate_regexp

validate_url

validate_email

validate_ip

string

stripped

encoded

special_chars

unsafe_raw

email

url

number_int

number_float

magic_quotes

callback

但我发现用简写的过滤名有时也会出现问题,我在我的笔记本上测试 print_r(filter_list()) 是包含 email 的,但 I('email','请输入正确的email地址','email') 却不能正确判断,改成 I('email','请输入正确的email地址',FILTER_VALIDATE_EMAIL) 就没问题。

I 函数的过滤方法也能支持正则表达式,如果要过滤的方法比较复制的话可以考虑使用正则表达式。在有些特殊的情况下,我们不希望进行任何过滤,即使DEFAULT_FILTER已经有所设置,可以使用:

// 下面两种方式都不采用任何过滤方法

I('get.name','','');

I('get.id','',false);

三、变量修饰符

变量修饰符和变量名称之间用“/”分割开来,变量修饰符的作用是强制转化变量的字符类型,比如:

I('get.id/d'); // 强制变量转换为整型

I('post.name/s'); // 强制转换变量为字符串类型

I('post.ids/a'); // 强制变量转换为数组类型

可以使用的修饰符包括:

修饰符

作用

s

强制转换为字符串类型

d

强制转换为整型类型

b

强制转换为布尔类型

a

强制转换为数组类型

f

强制转换为浮点类型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值