<p>应使用 gettype() 返回的小写字符串严格全等匹配,注意 "NULL" 全大写、"double" 代指 float、已关闭资源返回 "resource (closed)";生产环境推荐 is_* 系列函数替代。</p>

直接用 gettype() 返回的字符串做精确匹配即可,但要注意大小写、历史命名和边界情况。
返回值是小写英文字符串,区分具体类型
它不返回大写或驼峰格式,比如永远是 "integer" 而不是 "Integer" 或 "INT"。常见合法返回值包括:
- "boolean"(PHP 4 起支持)
- "integer"
-
"double"(即使变量是
float类型,也返回"double",这是历史原因) - "string"
- "array"
- "object"
- "resource"(PHP 4 起)
- "resource (closed)"(PHP 7.2.0+,已关闭的资源)
-
"NULL"(注意是全大写,不是
"null") - "unknown type"(极少见,如损坏资源)
判断时必须严格比较,不能模糊处理
比如 gettype("0") === "string" 和 gettype(0) === "integer" 结果完全不同,而 == 在弱比较下可能出错(如 "NULL" == null 为 true)。推荐写法:
- 用
===全等运算符,避免类型转换干扰 - 不要写
strpos(gettype($v), 'int') !== false这类模糊判断 - 对
"NULL"要单独处理,它既不是null值,也不等于"null"
不建议在生产逻辑中依赖 gettype() 判断分支
官方明确提示:返回值可能随 PHP 版本变化,且性能较差。例如:
立即学习“PHP免费学习笔记(深入)”;
- PHP 8.0+ 引入了
get_debug_type(),对对象能返回更具体的类名,但gettype()仍只返回"object" - 判断是否为数组,
is_array($v)比gettype($v) === "array"更快、更可靠 - 验证整数输入,
is_int($v)或filter_var($v, FILTER_VALIDATE_INT)才是正解,gettype($v) === "integer"无法拦截字符串"123"
调试时可用,上线后应替换为 is_* 系列函数
gettype() 最适合开发阶段快速看一眼变量“此刻是什么”,比如配合 var_dump() 使用:
echo gettype($data) . ': '; var_dump($data);- 日志中临时加一句
error_log('type=' . gettype($input));排查传参问题 - 写单元测试断言时辅助确认运行时类型,但正式条件分支请改用
is_string()、is_object()等



















