PHP 如何判断类型
大家平时写代码的时候,会不会遇到这种情况:明明给变量存了一串文字,结果调用函数时却报错说“这是数字类型,不能用文字处理逻辑”?或者想统计用户输入的内容是纯数字还是名字,却分不清怎么下手?其实PHP里判断类型根本不用记复杂的规则,用几个常用的函数就能搞定,咱们结合生活里的小例子慢慢说。
先搞懂:PHP里的变量类型像不同的“收纳盒”
很多人容易把变量当成“装东西的盒子”,其实PHP的变量类型更像“带标签的收纳盒”——同一个盒子,你装不同东西,标签会自动变。比如你用PHP写了一句$data = "123";,这时候它是“文字标签”的盒子;如果改成$data = 123;,标签就变成“数字标签”了。要是你想给朋友发消息,却把数字盒子直接发过去,肯定会出问题,所以判断类型就是先看清盒子的标签,再决定怎么用。

最常用的两个判断函数:is_系列和gettype
PHP给咱们准备了现成的“标签扫描仪”,最常用的就是is_系列函数和gettype,这两个刚好对应两种需求。
先说is_系列,它像“是XX吗?”的判断题,返回值只有“是(true)”或“不是(false)”,特别适合做条件判断。比如你做一个用户注册表单,用户可能输入“18”(年龄,数字)或者“十八”(昵称,文字),要区分的话就用is_numeric()——这是专门判断“是不是数字或数字格式的文字”的函数。举个例子:如果用户输入的是“25”,is_numeric("25")会返回true,你就可以把它当成年龄存进数字型的字段;如果输入的是“二十五”,返回false,就当成昵称存文字字段,不会出现存错类型的问题。
再说说gettype,它像“直接看标签”的查看器,会返回当前变量的完整类型名称。比如你做一个后台管理页,要统计当天用户提交的内容里,纯数字和文字各有多少,用gettype()就很方便。比如你遍历用户提交的内容数组,每个元素用gettype($item)判断,返回“string”就是文字,返回“integer”就是数字,统计数量后就能生成简单的报表,比一个个用is_函数判断效率高多了。
避坑提醒:别踩类型自动转换的小陷阱
很多人判断类型出错,都是因为忽略了PHP的“自动换标签”特性。比如你写$num = "0";,用is_numeric()判断会返回true,因为它会把“0”当成数字格式的文字;但如果用is_int()判断,就会返回false——因为is_int()是专门判断“是不是纯数字类型的整数”,而不是数字格式的文字。
举个真实的场景:你做一个商品库存录入功能,用户输入“0”表示库存为0,这时候如果用is_int()判断,会误以为“0”是文字类型,拒绝保存,反而影响使用。这时候就该用is_numeric(),既能识别用户输入的“0”,又能区分“苹果”这种文字,不会出错。
另外还有个特殊情况,空值和布尔值的判断要小心。比如$var = null,gettype()返回“NULL”,而is_null()能直接判断是不是空值;如果是$var = true,is_bool()才会返回true,别把布尔值当成普通文字处理,不然代码跑起来会莫名其妙的出错。
其实PHP判断类型的核心逻辑就是“先看需求选工具,再避开自动转换的坑”,不用死记硬背所有函数,记住is_系列用来做条件判断、gettype用来统计查看,再结合实际场景调整,就能轻松搞定大部分类型判断的问题。