PHP数据类型转换
数据类型转换是指将变量或值从一种数据类型转换成其他数据类型。转换的方法有两种,分别是自动类型转换和强制类型转换,下面就来分别介绍一下。
通常只有四种标量类型(integer、float、string、boolean)和 NULL 才会在运算中自动转换类型。注意,自动类型转换并不会改变变量本身的类型,改变的仅是这些变量的求值方式。
自动类型转换虽然是由系统自动完成的,但在混合运算时,自动类型转换也需要遵循按数据长度增加的方向进行,以保证精度不降低。规则如下图所示。
图:数据自动类型转换的关系
【示例】下面通过一个简单的示例来演示一下 PHP 中自动类型转换。
使用在变量之前加上用括号括起来的目标类型的方式强制转换变量类型时,括号中允许使用的变量类型如下所示:
使用具体的转换函数 intval()、floatval()、boolval()、strval() 等来转换变量的类型时,这些函数的作用如下所示:
【示例】使用以上几个函数强制转换变量的类型。
【示例】使用 settype() 函数强制转换变量的类型。
1、自动类型转换
每一个数据都有它的类型,具有相同类型的数据才能彼此操作。在 PHP 中,自动类型转换通常发生在不同类型的变量混合运算时,若参与运算的变量类型不同,则需要先将它们转换成同一类型,然后再进行运算。通常只有四种标量类型(integer、float、string、boolean)和 NULL 才会在运算中自动转换类型。注意,自动类型转换并不会改变变量本身的类型,改变的仅是这些变量的求值方式。
自动类型转换虽然是由系统自动完成的,但在混合运算时,自动类型转换也需要遵循按数据长度增加的方向进行,以保证精度不降低。规则如下图所示。
图:数据自动类型转换的关系
- 有布尔型值参与运算时,TRUE 将转化为整型 1,FALSE 将转化为整型 0,然后再参与运算。
- 有 NULL 值参与运算时,NULL 值将转化为整型 0 后再进行运算。
- 有 integer 类型和 float 类型的值参与运算时,会先把 integer 型的值转成 float 类型后再进行运算。
- 有字符串和数字型(integer、float)的值参与运算时,字符串类型会先转换为数字,再参与运算。转化后的数字是从字符串开始的数值型字符串,如在字符串开始的数值型字符串不带小数点则转为 integer 类型的值。如果带有小数点则转为 float 类型的值,例如:字符串“123ab”转为整数 123,字符串“123.45ab”转为浮点数 123.45,字符串“abc”转为整数 0。
【示例】下面通过一个简单的示例来演示一下 PHP 中自动类型转换。
<?php $str = '100abc'; $str += 5; echo '此时 $str 的类型为:'.gettype($str).', 值为:'.$str.'<br>'; $str += 3.14; echo '此时 $str 的类型为:'.gettype($str).', 值为:'.$str.'<br>'; $str = null + '新宝库'; echo '此时 $str 的类型为:'.gettype($str).', 值为:'.$str.'<br>'; ?>运行结果如下:
此时 $str 的类型为:integer, 值为:105
此时 $str 的类型为:double, 值为:108.14
此时 $str 的类型为:integer, 值为:0
2、强制类型转换
PHP 中的强制类型转换和其他语言很类似,可以在要转换的变量之前加上用括号括起来的目标类型(例如 $var = (int)3.1415;
),也可以使用具体的类型转换函数(例如 intval()、floatval()、strval() 等)或者 settype() 来转换类型。使用在变量之前加上用括号括起来的目标类型的方式强制转换变量类型时,括号中允许使用的变量类型如下所示:
- (int)、(integer):转换成整型;
- (bool)、(boolean):转换成布尔类型;
- (float)、(double)、(real):转换成浮点类型;
- (string):转换成字符串类型;
- (array):转换成数组类型;
- (object):转换成对象类型。
使用具体的转换函数 intval()、floatval()、boolval()、strval() 等来转换变量的类型时,这些函数的作用如下所示:
- intval():用于获取变量的整数值;
- floatval():用于获取变量的浮点值;
- boolval():用于获取变量的布尔值;
- strval():用于获取变量的字符串值。
【示例】使用以上几个函数强制转换变量的类型。
<?php $str = '123.456abc'; $int = intval($str); echo '变量 $int 的类型为:'.gettype($int).'<br>'; $float = floatval($str); echo '变量 $float 的类型为:'.gettype($float).'<br>'; $string = strval($str); echo '变量 $string 的类型为:'.gettype($string); ?>运行结果如下:
变量 $int 的类型为:integer
变量 $float 的类型为:double
变量 $string 的类型为:string
settype(mixed &$var, string $type)
其中,$var 为要转换的变量;$type 为要转换的类型,可以是 boolean(bool)、integer(int)、float(double)、string、array、object、null。【示例】使用 settype() 函数强制转换变量的类型。
<?php $str = (string)'123abc'; $bool = (bool)true; settype($str, 'integer'); settype($bool, 'string'); echo '$str 的类型为:'.gettype($str).'<br> $bool 的类型为:'.gettype($bool); ?>运行结果如下:
$str 的类型为:integer
$bool 的类型为:string
- 整型转化为浮点型,由于浮点型的精度范围远大于整型,所以转化后的精度不会改变;
- 浮点型转化为整型,将会自动舍弃小数部分,只保留整数部分。如果一个浮点数超过整型数字的有效范围,其结果将是不确定的;
- 字符串转化为数字时,是从字符串开始到第一个不是数字的字符结束(不符合的内容清空),也就是说如果字符串第一个字符不是数字的话,转换后的结果为 0;
- NULL 值转为字符串,结果为空字符。
所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算