首页 > 编程笔记 > PHP笔记 阅读:1

PHP类型转换(自动类型转换和强制类型转换)

PHP 程序中,当参与运算的两个数据的数据类型不同时,需要将这两个数据转换成相同的数据类型。通常情况下,数据类型转换分为自动类型转换和强制类型转换,下面对这两种转换方式进行详细介绍。

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)
在上述示例代码中:
当字符串型数据自动转换成整型时,如果字符串是数字或以数字开头,则直接转换为该数值,示例代码如下:
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"

相关文章