PHP 类型转换概述
PHP 是一种弱类型语言,变量的数据类型会根据上下文自动转换。类型转换分为显式和隐式两种:显式转换需手动指定目标类型,隐式转换由 PHP 自动完成。
显式类型转换
显式类型转换通过以下方式实现:
- 使用
(type)
语法 - 调用
settype()
函数 - 使用
intval()
,floatval()
,strval()
等函数
使用 (type)
语法
$var = "123";
$intVar = (int)$var; // 转换为整型
$floatVar = (float)$var; // 转换为浮点型
$boolVar = (bool)$var; // 转换为布尔型
$arrayVar = (array)$var; // 转换为数组
使用 settype()
函数
$var = "123";
settype($var, "integer"); // 修改原变量类型为整型
echo gettype($var); // 输出 "integer"
使用类型转换函数
$var = "3.14";
echo intval($var); // 输出 3(转换为整数)
echo floatval($var); // 输出 3.14(转换为浮点数)
echo strval(42); // 输出 "42"(转换为字符串)
隐式类型转换
PHP 在运算或逻辑判断时会自动进行类型转换。
算术运算中的隐式转换
$result = "10" + 5; // 输出 15(字符串 "10" 转为整数)
$result = "10.5" * 2; // 输出 21(字符串 "10.5" 转为浮点数)
逻辑判断中的隐式转换
if ("123") { // 字符串 "123" 转为布尔值 true
echo "This is true.";
}
常见类型转换场景
字符串与数字转换
$strNum = "42";
$num = $strNum + 0; // 隐式转为整数 42
$str = (string)$num; // 显式转为字符串 "42"
布尔值转换规则
以下值转换为 false
,其他情况为 true
:
- 整数
0
- 浮点数
0.0
- 空字符串
""
或"0"
- 空数组
[]
NULL
$boolVar = (bool)"0"; // false
$boolVar = (bool)"php"; // true
数组转换
将其他类型转为数组时,生成仅含一个元素的数组:
$var = "hello";
$arr = (array)$var;
print_r($arr); // 输出 Array([0] => "hello")
类型转换注意事项
浮点数转整数
浮点数转整数时会直接截断小数部分:
$float = 3.99;
$int = (int)$float; // 结果为 3(非四舍五入)
字符串转数字
字符串开头为数字时转为对应数值,否则为 0
:
echo (int)"24px"; // 输出 24
echo (int)"php24"; // 输出 0
严格类型检查
PHP 7+ 引入 declare(strict_types=1)
可启用严格模式,禁止隐式类型转换:
declare(strict_types=1);
function add(int $a, int $b) {
return $a + $b;
}
echo add("10", 5); // 抛出 TypeError(严格模式下需显式转换)
对象转换
对象转为其他类型时优先调用 __toString()
魔术方法:
class User {
public function __toString() {
return "User Object";
}
}
$user = new User();
echo (string)$user; // 输出 "User Object"
通过灵活运用类型转换,可以确保数据在运算或传递时符合预期格式,但需注意潜在的数据精度丢失或逻辑错误问题。