当我们需要将一个变量转化成整型的时候,可以使用 intval()
函数,它可以把变量的值转换为整数类型。intval()
函数的基本语法如下:
intval ( mixed $var [, int $base = 10 ] ) : int
有一点很重要,
intval()用于获取变量的整数值。
intval()不能用于object和array,否则会产生E_NOTICE错误并返回1。
其中 $var
表示需要被转换的变量,$base
表示需要转换的进制数,缺省为10进制,即默认情况下,$base
的值为10。
下面我们来看一下 intval()
函数的用法和一些注意事项:
转换规则
- 如果
$var
是一个浮点数,intval()
函数会将其舍弃小数部分并返回整数部分。 - 如果
$var
是一个字符串,intval()
函数会尝试将其转换为整数。如果字符串以数字开头,则转换为对应的整数;否则返回0。 - 如果
$var
是一个布尔值,intval()
函数会将其转换为整数。true 转换为1,false 转换为0。 - 如果
$var
是一个数组或对象,intval()
函数会返回0。
进制转换
除了将十进制数转化为整数之外,intval()
函数还可以实现不同进制之间的转换(2进制、8进制、16进制)。在这种情况下,需要显式指定 $base
参数的值。例如:
echo intval('1100', 2); // 12(二进制)
echo intval('14', 8); // 12(八进制)
echo intval('C', 16); // 12(十六进制)
还有一个比较特殊,
如果intval第二个参数是0,,那么你就可以自由根据你的需求去谢你需要的进制
比如
?c=0x117c(十六进制)
?c=010574(八进制)
其实就是进制表示的方法
注意事项
intval()
函数只能对整数类型的字符串进行转换,如果字符串中包含非数字字符将会被转化为0。- 当
$var
参数是一个对象时,如果该对象没有 __toString() 方法,则会报错并返回0。 - 当
$var
参数是一个数组时,intval()
函数只会转换其第一个元素。
综上所述,intval()
函数可以将变量转换为整型,并可以实现不同进制之间的转换。但在使用过程中需要注意一些细节,以避免出现意外情况。
例题(1):
<?
include("flag.php");
highlight_file(__FILE__);
if(isset($_GET['num'])){
$num = $_GET['num'];
if($num==="4476"){
die("no no no!");
}
if(intval($num,0)===4476){
echo $flag;
}else{
echo intval($num,0);
}
}
既然学会了,那就做道题目练习下,看知识是否牢固
这里要求num强等于4476,又不能直接相等,那就?num=4476akdskljd
例题二:
<?php
include("flag.php");
highlight_file(__FILE__);
if(isset($_GET['num'])){
$num = $_GET['num'];
if(preg_match("/[0-9]/", $num)){
die("no no no!");
}
if(intval($num)){
echo $flag;
}
}
;由于preg_match只能处理字符串,不能够处理数组,而且intval遇到数组后直接返回一,所以这里使用数组绕过
?num[]=1
希望本文对大家有所帮助!