is_int()仅判断变量是否为int类型,不转换;filter_var($var, FILTER_VALIDATE_INT)验证值是否可安全作整数,支持范围与进制;浮点数需用fmod($var, 1.0)===0.0判断是否为整数值。

用 is_int() 判断变量是否为整数类型
这是最直接的方式,但只对真正是 int 类型的变量返回 true。它不关心值看起来像不像整数,只看 PHP 内部类型。
常见错误现象:字符串 "123"、浮点数 45.0、布尔值 true 都会返回 false,哪怕它们“逻辑上”可转为整数。
-
is_int(123)→true -
is_int("123")→false -
is_int(45.0)→false(即使值是整数值,类型仍是float) -
is_int(null)→false
用 filter_var($var, FILTER_VALIDATE_INT) 验证整数值
当你需要判断一个变量(尤其是用户输入)是否「可安全当作整数使用」时,这个函数更实用。它会尝试解析并验证值是否符合整数语义,支持范围限制和进制指定。
使用场景:表单提交、API 参数校验、配置项读取。
立即学习“PHP免费学习笔记(深入)”;
-
filter_var("123", FILTER_VALIDATE_INT)→123(成功则返回转换后的 int) -
filter_var("12.5", FILTER_VALIDATE_INT)→false -
filter_var("0xFF", FILTER_VALIDATE_INT, ["flags" => FILTER_FLAG_ALLOW_HEX])→255 -
filter_var("1000", FILTER_VALIDATE_INT, ["options" => ["min_range" => 1, "max_range" => 999]])→false
注意 intval() 和 (int) 强制转换不能用于判断
这两个操作会无条件尝试转成整数,哪怕原始值完全不合理(如 "abc" → 0,null → 0),所以它们无法区分「合法整数」和「转换失败后得到的默认值」。
容易踩的坑:用 if ((int)$var) { ... } 来判断,会导致 "0"、"0.0"、false 等被误判为“非整数”或“空值”。
-
(int)"abc"→0(但你并不知道它原本是不是整数) -
(int)"0"→0,但if ((int)"0")会跳过分支,而"0"显然是合法整数字符串 - 正确做法是先用
filter_var验证,再用(int)转换
浮点数是否表示整数值?用 is_float() + fmod() 或 floor()
当变量可能是 float 类型(比如从 JSON 解析、数据库读取、计算结果),但你想确认它是否“等于某个整数”,就得额外检查小数部分是否为零。
性能影响很小,但要注意浮点精度问题,避免直接用 == 比较。
-
is_float($var) && fmod($var, 1.0) === 0.0是较稳妥的写法 -
is_float($var) && $var == floor($var)在大多数情况下也成立,但极端精度场景下可能出错 -
is_float(45.0) && fmod(45.0, 1.0) === 0.0→true -
is_float(45.1) && fmod(45.1, 1.0) === 0.0→false
is_int() 适合内部类型检查,filter_var() 适合外部输入验证,而浮点数整值判断则常出现在数学计算或类型混合场景里。别让类型隐式转换干扰你的判断逻辑。











