PHP 类型转换

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"

通过灵活运用类型转换,可以确保数据在运算或传递时符合预期格式,但需注意潜在的数据精度丢失或逻辑错误问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值