首页  >  文章  >  后端开发  >  php中的类型转换

php中的类型转换

韦小宝
韦小宝原创
2018-05-14 14:38:557420浏览

我们在PHP开发的过程中绝对会遇到接收到的数据类型和我们想要的数据类型不一样,这时我们就是可以使用PHP类型转换了,今天我们要来讲的就是PHP中的了类型转换,废话不多说了,我们一起来看吧!

转换为整型和浮点数

能转换为整数的类型只包括浮点数、布尔值,字符串和资源。数组、对象不能转换为数值类型

转换为浮点数时,除了字符串转换为浮点数时有自己的一套规则外,而其他值都是先转换为整数(在能转换为整数的前提下),再转换为浮点数。

当从浮点数转换成整数时,将向下取整(小数部分丢弃)。如果浮点数超出了整数范围,则结果为未定义,因为没有足够的精度给出一个确切的整数结果。在此情况下没有警告,甚至没有任何通知!

PHP 7.0.0 起,NaN 和 Infinity 在转换成 integer 时,不再是 undefined 或者依赖于平台,而是都会变成零。

字符串(只支持十进制)转换为整数时,从第一个字符开始寻找合法的整数字符直到字符串结尾或遇到非整数字符,将找到的字符转换为整数,若无合法字符,结果为0。

字符串转换为浮点数时,从第一个字符开始寻找合法的浮点数字符直到字符串结尾或遇到非浮点数字符,将找到的字符转换为浮点数,若无合法字符,结果为0。

如果该字符串没有包含 '.','e' 或 'E' 并且其数字值在整型的范围之内(由 PHP_INT_MAX 所定义),该字符串将被当成 integer 来取值。其它所有情况下都被作为 float 来取值。

该字符串的开始部分决定了它的值。如果该字符串以合法的数值开始,则使用该数值。否则其值为 0(零)。合法数值由可选的正负号,后面跟着一个或多个数字(可能有小数点),再跟着可选的指数部分。指数部分由 'e' 或 'E' 后面跟着一个或多个数字构成。

echo 0+"0xff","\n";   // 0  
echo 0+"2.33","\n";   // 2.33  
echo 0+"033","\n";    // 33  
echo 0+"2e3","\n";    // 2000
null -> 0
true -> 1
false -> 0

将 resource 转换成 integer 时, 结果会是 PHP 运行时为 resource 分配的唯一资源号。

转换为字符串

true -> "1"
false -> ""
null -> ""

整数或浮点数转换为字符串,直接将数值表示成字符串(十进制、小数点形式)

数组转换为字符串时,结果都是"Array"

对象转换为字符串时,结果都是"Object"

资源转换字符串时,类似"Resource id#1"这样的字符串

转换为布尔值

当其它值转换为布尔值时,只有以下这些值会转换为false,其他的全都转换为true:

整数0

浮点数0.0

字符串"0"

字符串""

空数组(无元素)

空对象(无成员)

NULL(包括尚未设置的变量)

从空标记生成的 SimpleXML 对象 

转换为数组

整数、浮点数、布尔值、字符串转换为数组时,得到一个新数组,数组只有一个元素,这就元素的值便是相应的整数、浮点数、布尔值、字符串。

将null转换为数组时,结果是一个空数组:

echo var_dump((array)null);  
//array(0) {

}

显示转换

1.可以在变量前面添加强制类型转换运算符:

(int)(integer)
(float)(double)(real)
(bool)(boolean)
(string)
(array)
(object)

这种方式并没有改变变量的数据类型,而只是改变了表达式的数据类型。

2.使用settype(var, type)函数

$var = true;  
settype($var, "integer");  
var_dump($var);  // int(1)

可见,变量的类型和值都被修改了

3.使用intval()/floatval()/boolval()/strval()系列函数

注意,这些函数并不会修改变量的值

$var = "0xff";  
$num = intval($var, 16);  
var_dump($var);  // string(4) "0xff"  
var_dump($num);  // int(255)

如果intval()函数的第一个参数是一个字符串,则可以再提供一个可选的第二参数,以指定字符串中数值的进制。如果不提供此参数,则默认按十进制处理,参数指定为0,则会以字符串的形式自动判断(以0x开头为十六进制。。)

intval()不能用于对象类型

该函数返回一个转换后的整数值,如果转换失败,返回0,如果参数是数组,则非空数组返回1,空数组返回0

boolval()获取参数的布尔值。

floatval()函数的参数只能是标量类型,如整数、浮点数、布尔值、字符串。不能用于数组或对象。

strval()函数的参数只能是标量类型,如整数、浮点数、布尔值、字符串。不能用于数组或对象。

什么情况下不会进行隐式转换

算术运算符的两个操作数都会被转换为数值类型。

字符串连接符的两个操作数都会被转换为字符串类型。

在一个需要字符串的表达式中,会自动转换为string。比如在使用函数 echo 或 print 时,或在一个变量和一个 string 进行比较时,就会发生这种转换。

以上就是 php中的类型转换 的所有内容了,希望对大家有帮助,更多质料请在本站搜索。

相关推荐:

php类型转换的判别

php类型转换

PHP类型转换的面试题与答案解析

以上是php中的类型转换的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn