本文目录导读:

在PHP中,强制类型转换(类型转换)可以通过以下几种方式实现:
基本类型转换语法
// 转换为整型 (int) $variable (integer) $variable // 转换为浮点型 (float) $variable (double) $variable (real) $variable // 转换为字符串 (string) $variable // 转换为布尔型 (bool) $variable (boolean) $variable // 转换为数组 (array) $variable // 转换为对象 (object) $variable
实际示例
<?php
// 字符串转整型
$str = "123.45abc";
$int = (int) $str;
echo $int; // 输出: 123
// 字符串转浮点型
$float = (float) $str;
echo $float; // 输出: 123.45
// 数值转布尔型
$num = 0;
$bool = (bool) $num;
var_dump($bool); // bool(false)
// 数值转字符串
$num = 100;
$str = (string) $num;
var_dump($str); // string(3) "100"
// 数组转换
$obj = (array) new stdClass();
var_dump($obj); // array(0) {}
// 对象转换
$arr = ['name' => 'John', 'age' => 25];
$obj = (object) $arr;
echo $obj->name; // 输出: John
?>
特殊类型转换函数
<?php
// intval() - 获取整数值
$int = intval("42.5abc"); // 42
// floatval() - 获取浮点数值
$float = floatval("42.5abc"); // 42.5
// strval() - 获取字符串值
$str = strval(123); // "123"
// boolval() - 获取布尔值 (PHP 5.5+)
$bool = boolval("false"); // true (非空字符串为true)
// settype() - 设置变量类型
$var = "100";
settype($var, "integer");
echo $var; // 100
?>
类型转换规则表
<?php
$tests = [
"转换从/到" => ["整型", "浮点型", "布尔型", "字符串"],
"整型(0)" => [0, 0.0, false, "0"],
"整型(1)" => [1, 1.0, true, "1"],
"字符串空" => [0, 0.0, false, ""],
"字符串'0'" => [0, 0.0, false, "0"],
"字符串'abc'" => [0, 0.0, true, "abc"],
"null" => [0, 0.0, false, ""],
"true" => [1, 1.0, true, "1"],
"false" => [0, 0.0, false, ""]
];
?>
注意事项
<?php
// 1. 浮点数精度问题
$result = (int) ( (0.1 + 0.7) * 10 );
echo $result; // 可能输出7,而不是8
// 2. 布尔转换特定值被视为false
$falsy_values = [0, 0.0, "", "0", null, false, []];
foreach ($falsy_values as $val) {
var_dump((bool) $val); // 全部为false
}
// 3. 对象转数组
class User {
public $name = "John";
protected $age = 25;
private $email = "john@example.com";
}
$user = new User();
$arr = (array) $user;
// 属性键名会包含类名信息
var_dump($arr);
?>
推荐实践
<?php
// 输入验证和类型转换结合
function sanitizeInput($input) {
// 明确指定期望的类型
$id = (int) $input['id'];
$price = (float) $input['price'];
$name = (string) $input['name'];
$active = (bool) $input['active'];
return [
'id' => $id,
'price' => $price,
'name' => $name,
'active' => $active
];
}
// 使用严格类型声明
declare(strict_types=1);
function calculate(int $a, int $b): int {
return $a + $b;
}
// 强制转换为期望的类型
$result = calculate((int) "5", (int) "10");
echo $result; // 15
?>
- 使用
(类型)语法进行快速类型转换 - 使用类型转换函数(intval(), floatval()等)进行更可控的转换
- 注意类型转换的特殊规则(如空字符串、null、false等)
- 结合输入验证和错误处理使用类型转换
- 在需要严格类型检查的项目中使用
declare(strict_types=1)