is_int()仅判断变量是否为int类型,不转换、不解析;对字符串"123"、浮点数42.0、布尔值均返回false;适合类型严格校验场景,不适用于表单等字符串输入验证。

is_int 用来判断变量是否为整数类型
is_int 是 PHP 内置的类型检查函数,它只返回 true 当且仅当传入的变量是 int 类型(即底层存储为整型,不是字符串、浮点数或布尔值伪装的“整数”)。它不进行类型转换,也不做数值合法性校验。
常见误用是拿它去验证表单输入或 JSON 解析后的数据——这些通常都是字符串,哪怕内容是 "123",is_int("123") 也一定是 false。
为什么 is_int("123") 返回 false?
因为 "123" 是字符串类型,PHP 的类型系统严格区分 int 和 string。即使字符串看起来像整数,is_int 也不会尝试解析或转换。
-
is_int(42)→true -
is_int("42")→false -
is_int(42.0)→false(这是 float) -
is_int(true)→false(bool 不是 int)
如果你需要判断一个值“能否安全转成整数”,应该先用 filter_var($val, FILTER_VALIDATE_INT) 或结合 is_numeric() + ctype_digit()(注意后者只适用于非负纯数字字符串)。
立即学习“PHP免费学习笔记(深入)”;
is_int 和 gettype、=== 的区别在哪
gettype($x) === "integer" 功能上等价于 is_int($x),但性能略差;而 $x === (int)$x 看似聪明,实则危险:它会强制转换再比较,导致 "123" === (int)"123" 成立(因为右边变成 123,左边还是字符串),结果不可靠。
- 用
is_int判断原始类型,适合类型敏感场景(如函数参数校验、序列化逻辑) - 别用
=== (int)做类型判断,它掩盖了类型不一致问题 - 在严格模式下(PHP 8.0+ 启用
declare(strict_types=1)),类型声明比is_int更早拦截错误,优先考虑类型提示
实际项目中该不该依赖 is_int
多数 Web 场景中,你拿到的数据来自 $_GET、$_POST 或 API 请求体,它们全是字符串。这时候直接调 is_int 几乎总返回 false,毫无意义。
真正该做的是:先过滤/转换,再验证。例如:
$id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);
if ($id === false || $id === null) {
// 处理非法输入
}
只有当你明确知道变量来源可控(比如函数内部计算结果、数组键、count() 返回值),才用 is_int 快速断言类型。否则,它容易成为隐藏的逻辑漏洞入口。



















