PHP类型转换(自动类型转换和强制类型转换)
PHP 程序中,当参与运算的两个数据的数据类型不同时,需要将这两个数据转换成相同的数据类型。通常情况下,数据类型转换分为自动类型转换和强制类型转换,下面对这两种转换方式进行详细介绍。
在标量类型中,如果参与运算的两个数据的数据类型不同,PHP 会自动将这两个数据转换成相同的类型再运算。
常见的自动类型转换有 3 种,具体介绍如下:
下面演示将整型 0、浮点型 0.0、空字符串、字符串 0 和布尔值 false 比较,示例代码如下:
上述示例代码的输出结果都为 true,说明整型 0、浮点型 0.0、空字符串和字符串 0 被转换成了 false。
下面演示将整型 1、3、-5、浮点型 4.0 和布尔值 true 比较,示例代码如下:
当字符串型数据自动转换成整型时,如果字符串是数字或以数字开头,则直接转换为该数值,示例代码如下:
当整型或浮点型数据自动转换成字符串型时,数值直接被转换成字符串,示例代码如下:
强制类型转换的语法格式如下:
强制类型转换中的目标类型具体如下表所示:
下面演示如何对数据进行强制类型转换,示例代码如下:
PHP自动类型转换
自动类型转换由 PHP 内部自动完成,开发人员无法干预。在标量类型中,如果参与运算的两个数据的数据类型不同,PHP 会自动将这两个数据转换成相同的类型再运算。
常见的自动类型转换有 3 种,具体介绍如下:
1) 自动转换成布尔型
运算时,整型 0、浮点型 0.0、空字符串和字符串 0 会被转换为 false,其他值被转换为 true。下面演示将整型 0、浮点型 0.0、空字符串、字符串 0 和布尔值 false 比较,示例代码如下:
var_dump(0 == false); // 输出结果: bool(true) var_dump(0.0 == false); // 输出结果: bool(true) var_dump('' == false); // 输出结果: bool(true) var_dump('0' == false); // 输出结果: bool(true)在上述示例代码中,“==”是比较运算符,用于比较两个值是否相等,将整型 0、浮点型 0.0、空字符串、字符串 0 和布尔值 false 进行比较时,只有“==”左边的值被转换成 false,最终的比较结果才为 true。
上述示例代码的输出结果都为 true,说明整型 0、浮点型 0.0、空字符串和字符串 0 被转换成了 false。
下面演示将整型 1、3、-5、浮点型 4.0 和布尔值 true 比较,示例代码如下:
var_dump(1 == true); // 输出结果: bool(true) var_dump(3 == true); // 输出结果: bool(true) var_dump(-5 == true); // 输出结果: bool(true) var_dump(4.0 == true); // 输出结果: bool(true)上述示例代码的输出结果都为true,说明整型1、3、-5、浮点型4.0被转换成了true。
2) 自动转换成整型
当布尔型数据自动转换成整型时,true 会被转换成整型 1,false 会被转换成整型 0,示例代码如下:var_dump(true + 1); // 输出结果: int(2) var_dump(false + 1); // 输出结果: int(1)在上述示例代码中:
- 表达式“true + 1”的输出结果是 2,说明 true 被自动转换成了整型1;
- 表达式“false + 1”的输出结果是 1,说明 false 被自动转换成了整型 0。
当字符串型数据自动转换成整型时,如果字符串是数字或以数字开头,则直接转换为该数值,示例代码如下:
var_dump('1' + 1); // 输出结果: int(2) var_dump('1PHP' + 1); // 输出结果: int(2)在上述示例代码中,字符串“1”和“1PHP”都被自动转换成了整型1。
3) 自动转换成字符串型
当布尔型数据自动转换成字符串型时,true 被转换成字符串“1”,false 被转换成空字符串,示例代码如下:echo 'true被转换成字符串:' . true; // 输出结果: true被转换成字符串:1 echo 'false被转换成字符串:' . false; // 输出结果: false被转换成字符串:在上述示例代码中,“.”是字符串连接符,用于对两个数据进行字符串连接,true 自动转换成了字符串“1”,false 自动转换成了空字符串。
当整型或浮点型数据自动转换成字符串型时,数值直接被转换成字符串,示例代码如下:
var_dump(1 . 'PHP'); // 输出结果: string(4) "1PHP" var_dump(3.14 . 'PHP'); // 输出结果: string(7) "3.14PHP"在上述示例代码中,整型 1 自动转换成了字符串“1”,浮点型 3.14 自动转换成了字符串“3.14”。
PHP强制类型转换
强制类型转换是指将某个变量或数据转换成指定的数据类型。强制类型转换的语法格式如下:
(目标类型)变量或数据在上述语法格式中,在变量或数据前添加小括号“()”指定目标类型,即可将变量或数据强制转换成想要的数据类型。
强制类型转换中的目标类型具体如下表所示:
目标类型 | 功能描述 | 目标类型 | 功能描述 |
---|---|---|---|
bool | 强制转为布尔型 | float | 强制转为浮点型 |
string | 强制转为字符串型 | array | 强制转为数组 |
int | 强制转为整型 | object | 强制转为对象 |
下面演示如何对数据进行强制类型转换,示例代码如下:
var_dump((bool)-5.9); // 输出结果:bool(true) var_dump((int)'hello'); // 输出结果:int(0) var_dump((float)false); // 输出结果:float(0) var_dump((string)12); // 输出结果:string(2) "12"