最可靠方法是先用is_int()确认整型再判断符号:function is_negative_integer($x) { return is_int($x) && $x
用
is_int()+ 比较运算符判断负整数最可靠PHP 的类型松散容易让人误以为
-5 就够了,但字符串 <code>"-5"、浮点数-5.0、甚至布尔值false都可能通过简单比较。必须先确认是整型,再判断符号。
is_int($x)是唯一能准确识别“真·整型”的函数,gettype($x) === 'integer'效果相同但更啰嗦- 仅用
$x 会把 <code>"-10"(字符串)、-0.0(浮点)、null(转成 0)都当成负数,结果错误- 别用
filter_var($x, FILTER_VALIDATE_INT)—— 它对-0返回false,且把"-5"当合法,不符合“必须是整型”的前提正确写法:
function is_negative_integer($x) { return is_int($x) && $x < 0; }注意
-0在 PHP 中不是负整数PHP 中
-0和0完全等价,底层都是同一个整数值 0。所以is_negative_integer(-0)必然返回false,这不是 bug,是整型的数学定义决定的。
var_dump(-0 === 0); // bool(true)is_int(-0)返回true,但-0 是 <code>false,所以整个判断为false- 如果你的业务里“-0”是特殊标记(比如来自外部协议),那它根本不是整型语义,应作为字符串处理,不走这套判断逻辑
别混淆
intval()或强制转换后的结果把变量先转成整型再判断,看似省事,实则掩盖类型问题,导致误判。
intval("-5") === -5→ 看似 OK,但intval("abc") === 0,intval(null) === 0,这些都会被错认为“非负整数”(int)"-5" === -5同样无法区分原始类型,(int)"-5abc"也得 -5,而你本意是拒绝非法输入- 如果上游数据源不可信(如 GET 参数、JSON 解析结果),强制转换是在替用户做假设,而不是校验
实际使用中要区分“检查输入”和“处理已知整型”
场景不同,检查粒度就不同。API 入参校验必须严格;函数内部对已知是
int的参数,直接$x 即可。立即学习“PHP免费学习笔记(深入)”;
- Web 请求参数(如
$_GET['id']):永远先is_int(),它几乎总是string,得用filter_var($v, FILTER_VALIDATE_INT)配合范围检查,而非is_int()- 函数参数声明为
int $n(PHP 7.0+ 类型声明):运行时保证是整型,此时$n 安全、高效- 数据库取出的字段(如 PDO::FETCH_ASSOC 默认返回 string):即使存的是 -123,PHP 读出来仍是
"-123",不能跳过类型判断类型不是装饰,是契约。松手不管,后面 debug 时看到
"-42" 还以为是 PHP 坑,其实是自己绕过了类型边界。
0
0
相关文章
PHP中ceil()异常向上取整的根源与解决方案:浮点数精度陷阱详解
PHP如何对整型数组进行排序 PHP整数数组升序降序【必看】
Laravel 模型关联中安全访问 belongsTo 关系属性的完整解决方案
Laravel 模型关联中安全访问 belongsTo 关系属性的完整实践指南
PHP 中使用 cURL 动态传递 JSON 参数变量的完整教程
本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门AI工具
相关专题
JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。
546
2023.08.23
操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。
326
2023.10.13
在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。
910
2023.08.02
c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。
249
2023.09.22
在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。
967
2024.03.01
java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。
1560
2023.10.24
Go语言测试体系与代码质量保障聚焦于构建工程级可靠性系统。本专题深入解析Go的测试工具链(如go test)、单元测试、集成测试及端到端测试实践,结合代码覆盖率分析、静态代码扫描(如go vet)和动态分析工具,建立全链路质量监控机制。通过自动化测试框架、持续集成(CI)流水线配置及代码审查规范,实现测试用例管理、缺陷追踪与质量门禁控制,确保代码健壮性与可维护性,为高可靠性工程系统提供质量保障。
48
2026.02.28
热门下载
相关下载
精品课程
最新文章





