PHP intval()函数详解
·
1.基本定义与语法
intval()是PHP的内置函数,用于将变量转换为整数类型。
intval($value,$base) //返回整型,若返回失败就返回0
形参介绍
- $value:要转换的变量
- base:进制基数(仅当value为字符串时生效),范围2-36,默认为10。
核心工作原理
- 对字符串:从左到右解析,直到遇到非数字字符停止
- 对浮点数:直接截断小数部分(不四舍五入)
- 对布尔值:true是1,false是0
- 对特殊类型:空值、数组、对象等返回0
- 进制处理:当value为字符串且base有效时,按指定进制解析
详细用法示例
- 基本类型转换
//字符串
intval("123"); //123
intval("123abc"); //123(截断非数字字符)
intval("abc123"); //0(无法从开头解析数字)
intval(""); //0
intval("~~1000");//0
//浮点数
intval(12.99); //12(截断,不四舍五入)
intval(-12.99); //-12
intval(1e5); //100000
intval('1e5'); //1(把'1e5'当字符串处理)
intval((0.1+0.7)*10; //按照正常数学逻辑,结果应该是 8,但由于底层其实是 7.9999...,截断后实际上会输出 7
//布尔值
intval(true); //1
intval(false); //0
intval(null); //0
//复合类型
intval([]); //0(空数组返回0,非空数组返回1)
intval(new stdClass); //触发错误(通常是 E_WARNING 或 E_NOTICE 级别的警告)并且函数会强制返回 1。
intval(fopen(_FILE_,'r')); //0(资源类型)
- 进制转换详解
//二进制
intval('1010',2); //10
intval('1010',0); //1010(base=0 自动检测前缀,但此例无前缀,所以当十进制处理)
//八进制
intval('12',8); //10
intval('012',0); //10(自动检测前缀,‘012’的前缀为0,符合八进制,按八进制处理)
//十六进制
intval('A',16); //10
intval('0xA',0); //10(自动识别0x前缀)
intval('0xA',16); //10
//特殊情况
intval('FF',10); //0(FF不是十进制数字)
intval(255,16); //255(base被忽略,因为255不是字符串)
intval()致命缺点(陷阱)
- 静默失败
无效输入统一返回0,无法与合法输入的0区分
// 攻击者提交:?user_id=admin
$userId = intval($_GET['user_id']); // 0
// 若系统存在 id=0 的管理员账户...
$user = getUserById($userId); // 可能返回管理员!
- 浮点精度缺陷
// 金融计算灾难
$amount = 0.1 + 0.2; // 实际 ≈ 0.30000000000000004
$cents = intval($amount * 100); // 30 还是 29?取决于 PHP 版本和平台
- 无法处理大整数
// 32 位系统
intval("2147483648"); // -2147483648(溢出为负数!)
// 64 位系统
intval("9223372036854775808"); // 可能溢出
更多推荐


所有评论(0)