PHP判断变量类型首选is_*函数,因其语义明确、性能好、不易误判;调试用var_dump();PHP 8.0+推荐get_debug_type()替代gettype()。

直接说结论:PHP里判断变量类型,优先用 is_* 系列函数(如 is_int()、is_string()),而不是 gettype();需要调试看值和结构时,用 var_dump();PHP 8.0+ 可考虑 get_debug_type() 替代 gettype()。
is_* 系列函数为什么是首选
它们返回布尔值,语义明确、性能好、不易误判,适合条件分支和类型守卫。
-
is_int()只对真正的整型返回true,is_numeric("123")却会返回true—— 后者不是类型检查,而是“是否可解释为数字” -
is_float()和is_double()是同义函数,但gettype(1.0)返回"double",容易让人误以为 PHP 有独立的double类型 -
is_null()安全检测null值;而isset($var)是“已设置且不为null”,两者用途完全不同 -
is_bool()能区分true和字符串"true";is_string("false")是true,is_bool("false")是false
gettype() 的实际坑点
它返回的是小写字符串,但结果不一致、不精确,不适合用于逻辑判断。
-
gettype(1.0)→"double",不是"float";gettype(NAN)→"double";gettype(INF)→"double" -
gettype(null)→"NULL"(全大写),而其他类型都是小写,字符串比较时容易出错 -
gettype(new DateTime())→"object",无法知道具体类名;PHP 8.0+ 应该换用get_debug_type() - 返回
"unknown type"的情况虽少,但一旦出现,说明底层类型异常,靠它做分支极易漏逻辑
var_dump() 和 get_debug_type() 的分工
var_dump() 是调试工具,不是类型判断函数;get_debug_type() 才是 gettype() 的现代替代。
立即学习“PHP免费学习笔记(深入)”;
-
var_dump([1, "a"])输出带缩进和键值的完整结构,适合开发期人工确认,但不能直接用于 if 判断 -
get_debug_type(new class {})返回"class@anonymous",比gettype()的"object"有用得多 -
get_debug_type(STDIN)返回"resource (stream)",比gettype()的"resource"更具体 - 注意:
get_debug_type()是 PHP 8.0+ 才有,低版本必须降级处理或自行封装
真正容易被忽略的是:类型判断从来不是孤立动作。比如你写了 if (is_string($input)) { json_decode($input); },却没检查 json_last_error() === JSON_ERROR_NONE —— 类型对了,内容未必合法。别让“类型正确”掩盖了“语义有效”的缺失。



















