php intval代码实现
intval 函数的基本实现
PHP 的 intval 函数用于将变量转换为整数。以下是其核心逻辑的代码实现:
function intval($var, $base = 10) {
if (is_int($var)) {
return $var;
}
if (is_float($var)) {
return (int)$var;
}
if (is_string($var)) {
$var = trim($var);
if ($var === '') {
return 0;
}
if (ctype_digit($var) || ($var[0] === '-' && ctype_digit(substr($var, 1)))) {
return (int)$var;
}
if (strpos($var, '.') !== false) {
return (int)(float)$var;
}
if (strtolower(substr($var, 0, 2)) === '0x') {
return (int)hexdec(substr($var, 2));
}
if ($base === 0) {
if ($var[0] === '0') {
$base = 8;
$var = substr($var, 1);
} else {
$base = 10;
}
}
return (int)base_convert($var, $base, 10);
}
if (is_bool($var)) {
return $var ? 1 : 0;
}
if (is_null($var)) {
return 0;
}
if (is_array($var)) {
return count($var) ? 1 : 0;
}
if (is_object($var)) {
if (method_exists($var, '__toString')) {
return intval((string)$var, $base);
}
return 1;
}
return 0;
}
处理不同类型输入
字符串转换 字符串转换为整数时,会处理以下情况:
- 空字符串返回 0
- 纯数字字符串直接转换为整数
- 包含小数点的字符串先转换为浮点数再取整
- 十六进制格式(0x 开头)转换为十进制整数
- 根据指定的进制参数进行转换
浮点数转换 直接截断小数部分转换为整数:
$float = 3.14;
$int = (int)$float; // 3
布尔值转换 true 转换为 1,false 转换为 0:

$bool = true;
$int = (int)$bool; // 1
数组转换 非空数组返回 1,空数组返回 0:
$arr = [1, 2, 3];
$int = (int)$arr; // 1
进制转换处理
intval 支持第二个参数指定进制(2-36):

$binary = '1010';
$decimal = intval($binary, 2); // 10
$hex = '1a';
$decimal = intval($hex, 16); // 26
当进制参数为 0 时,会根据字符串格式自动判断:
- 0 开头视为八进制
- 0x 开头视为十六进制
- 其他视为十进制
边界情况处理
超大数字会返回 PHP 整数最大值:
$bigNum = '999999999999999999999999999999';
$int = intval($bigNum); // 9223372036854775807 (64位系统)
非数字字符串返回 0:
$str = 'abc';
$int = intval($str); // 0






