PHP整数变量直接赋值即可,不可用int声明;合法字面量包括十进制(123)、八进制(0123或0o123)、十六进制(0xFF)、二进制(0b1010)及PHP 7.4+下划线分隔(1_000_000),格式错误将导致解析失败或类型意外转换。

int 在 PHP 里不是声明时用的类型关键词,而是运行时的类型标识——你不能写 int $x = 10;(PHP 不支持严格类型声明整型变量),直接赋值就行。
怎么写整数字面量才不会出错
PHP 支持多种进制写法,但格式错一个字符就会变成别的类型或报错:
- 十进制:直接写数字,如
123、-456 - 八进制:以
0开头(PHP 8.1+ 也支持0o123),如0123表示十进制83;注意08或09是非法的(八进制不含 8、9) - 十六进制:以
0x开头,如0xFF→255,大小写不敏感 - 二进制:以
0b开头,如0b1010→10 - 带下划线:PHP 7.4+ 允许
1_000_000,等价于1000000,仅作可读性分隔,不可开头、结尾或连续出现
常见错误:0xG1(G 不是合法十六进制字符)、0b2(二进制只认 0/1)、123_(下划线结尾)都会导致解析失败或意外转为 float。
整数溢出时 PHP 怎么处理
PHP 不会报错,而是静默转成 float —— 这是很多逻辑 bug 的源头。
立即学习“PHP免费学习笔记(深入)”;
- 判断当前平台最大整数:用
PHP_INT_MAX(64 位系统通常是9223372036854775807) -
var_dump(9223372036854775807 + 1)→ 输出float(9.2233720368548E+18),不再是整数 - 一旦变成
float,后续比较(如===)或位运算(&、|)可能失效 - 如果必须大整数运算,得换
GMP或BCMath扩展,原生int不行
整数除法要小心结果类型
/ 永远返回 float,哪怕被除数和除数都是整数:
var_dump(10 / 2); // float(5)
- 要整除取商(向下取整),用
intdiv(10, 3)→3 - 要取余,用
%,但注意它对负数的行为:PHP 中-10 % 3是-1(符号随被除数) - 强制转
(int)(10 / 3)会截断小数,但遇到float精度问题时可能不准(比如0.1 + 0.2转int得0)
怎么可靠判断一个变量是不是整数
is_int() 只认真正类型为 integer 的值,is_numeric() 和 filter_var($x, FILTER_VALIDATE_INT) 行为完全不同:
-
is_int("123")→false(字符串) -
is_numeric("123")→true,但它也接受"12.3"、"-5e2" -
filter_var("123", FILTER_VALIDATE_INT)→123;filter_var("12.3", FILTER_VALIDATE_INT)→false - 检查是否为整数且在安全范围内:先
filter_var,再对比是否 ≤PHP_INT_MAX且 ≥PHP_INT_MIN
最易被忽略的一点:PHP 的整数行为高度依赖底层平台(32/64 位)和 PHP 版本,同一段代码在不同环境可能产生 int 或 float,别假设“大数一定报错”——它只是悄悄变了类型。



















