一、PHP类型系统基础
PHP作为动态类型语言,其类型系统具有以下特征:
-
8种原始数据类型:boolean/integer/float/string/array/object/resource/null
-
类型转换的常见场景:
$num = "123"; // 字符串
$num += 0; // 隐式转为整数123
二、比较运算符全景图
运算符名称比较方式==松散相等值相等即可===严格相等值+类型都相等!=松散不等==的相反!==严格不等===的相反
三、经典比较案例解析
1. 字符串与数字比较
0 == "php" // true,因字符串转为0
"" == 0 // true,空字符串转为0
"123" == 123 // true,字符串转为数字
2. 布尔值比较陷阱
false == [] // true
true == "1" // true
null == false // true
3. 数组比较规则
[1,2] == [1,2] // true,顺序敏感
[1,2] == ["1","2"] // true,松散类型
[1,2] === ["1","2"] // false
四、严格比较的最佳实践
数据库ID比较必须用===
$userIdFromDB = "100"; // 字符串类型
$inputId = 100; // 整数类型
if ($userIdFromDB === $inputId) { /* 不会执行 */ }
表单验证推荐方案
// 验证必填字段
if ($_POST['username'] === '') {
throw new Exception('用户名不能为空');
}
// 验证数字范围
$age = $_POST['age'];
if (!is_numeric($age) || (int)$age !== $age) {
throw new Exception('年龄必须是整数');
}
五、类型安全的辅助函数
1.类型检查函数
is_int(123); // true
is_numeric("123"); // true
ctype_digit("123");// true(纯数字字符串)
2.转换函数对比
intval("0123"); // 123(忽略前导0)
(int)"0123"; // 123
settype($var, "int");
六、性能考量
严格比较(===)通常比松散比较快5-10%
类型转换的隐藏成本:
// 较慢的写法
if ($count == "100") {...}
// 更高效的写法
if ((int)$count === 100) {...}
结语
掌握PHP类型比较的要点:
-
重要数据显式类型转换