php如何判断变量类型_php判断变量类型函数汇总【判断】

14次阅读

php判断变量类型应优先使用is_*()系列函数而非gettype(),因其返回布尔值、语义明确;对象类型须用instanceof;需结合类型转换和filter_var处理边界情况。

php如何判断变量类型_php判断变量类型函数汇总【判断】

PHP 判断变量类型不能只靠 gettype(),它返回字符串、不区分资源类型、对 NULL 和 false 也容易混淆;实际开发中更常用的是类型检查函数组合 + 严格比较。

is_*() 系列函数做明确类型断言

这些函数返回布尔值,语义清晰,适合条件分支和防御性编程:

  • is_String($var):只认 string"1" 是 true,1 是 false
  • is_int($var)is_Integer($var):只认整型1 是 true,"1"1.0 都是 false
  • is_Float($var)is_double($var):只认浮点数,1.0 是 true,1 是 false(注意:PHP 8.0+ 中 is_float(1.0) 为 true,但 is_float(1) 仍为 false)
  • is_bool($var):只认 true / false"false"0"" 都不是 bool
  • is_array($var):只认数组,[] 是 true,new stdClass() 是 false
  • is_Object($var):只认对象实例,new DateTime() 是 true,[] 是 false
  • is_null($var):只认 null== null 会把 0""false 都当 null,必须用 === nullis_null()
  • is_Resource($var):识别文件句柄、mysql 连接等,但无法区分资源类型(如 fopen()curl_init() 都返回 resource

避免 gettype() 的陷阱

gettype() 返回字符串如 "integer""double""Boolean",但它有三个常见问题

  • null 返回 "NULL"(全大写),但 PHP 关键字是小写 null,容易在 switch 中漏掉大小写判断
  • 对资源统一返回 "resource",无法知道是 stream 还是 curl,得配合 get_resource_type()
  • 对对象一律返回 "object",不体现类名,要获知具体类型需用 get_class()instanceof

所以除非你明确需要字符串描述(比如日志记录),否则优先用 is_*()

立即学习PHP免费学习笔记(深入)”;

对象类型判断:用 instanceof 而非 gettype()

判断对象是否属于某个类或接口instanceof 是唯一可靠方式:

if ($obj instanceof DateTime) {     echo "是 DateTime 实例"; } if ($obj instanceof jsonSerializable) {     echo "实现了 jsonSerializable 接口"; }

注意:instanceofnull 返回 false,不会报错;而 get_class($obj)$objnull 时会警告。如果不确定是否为对象,先用 is_object($obj) 再用 instanceof 更安全。

类型判断的边界情况必须手动验证

PHP 的弱类型让很多“看起来像”的值类型不同,比如:

  • "123" 是 string,123 是 int,123.0 是 float —— 三者 == 为 true,但 === 全部为 false
  • 0"0"falsenull[]empty() 下都为 true,但类型完全不同
  • is_numeric("1e5") 为 true,但 is_float("1e5") 为 false —— 字符串形式的科学计数法不被 is_float() 认可

所以涉及用户输入、JSON 解析、数据库读取等场景,不能只依赖单一函数,要结合 is_*() + filter_var($val, FILTER_VALIDATE_...) + 显式类型转换(如 (int)$val)来收口。

text=ZqhQzanResources