博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
1.3PHP数据类型转换
阅读量:3702 次
发布时间:2019-05-21

本文共 1888 字,大约阅读时间需要 6 分钟。

本系列所有代码示例都是在win10*(64位),php7,apache环境下测试的

1、自动转换
自动转换通常是不同数据类型的变量进行混合运算时。不同类型的变量运算,先转换成同一类型,然后再运算。通常是4种标量类型(int、float、string、boolean)才能自动转换。需要注意的是,这里所说的自动转换并没有改变运算类型本身的数据类型。
例如,当$a+$b,变量$a本身并没有数据转换,在其他地方调用$a时,$a类型还是原数据类型。
在混合运算时,自动转换需要遵循转换按数据长度增加方向进行,保证精度不降低。
转换规则:
①布尔值参与运算时,true会转换为整型1、false会转换成整型0后再参与计算
②NULL会转换成整型0再参与计算
③有int和float参与运算时,int类型会先转换成float类型后再计算
④字符串和int或者string计算时,字符串会先转换为数字。eg:“abc”会转换成0;“123abc”会转换成123;“123.123abc”会转换成123.123。
⑤有浮点型参与运算的,结果也是浮点型。全是整型参与运算的,结果则是整型。
eg:

2、强制转换

1)在不改变原变量类型和值的情况下,强制转换,只是在计算中改变类型,或者用变量接收。
①(int),(integer):转换成整型
②(bool),(boolean):转换成布尔型
③(float),(double),(real):转换成浮点型
④(string):转换成字符串
⑤(array):转换成数组
⑥(object):转换成对象
⑦intval(),floatval()和strval()。intval()获取变量的整数值,floatval()获取变量浮点值,strval()获取变量的字符串值,不能将者三个函数用于数组或对象。
2)直接改变原变量类型和值用settype(),例如settype($a,‘string’);
eg:

3、转换细节

1)整型和浮点型
①整型转换为浮点型:由于浮点型的精度范围远大于整型,所以转换后的数值精度不会改变。
②浮点型转换为整型:自动舍弃小数部分,只保留整数部分。注:如果一个浮点型超过整数取值的有效范围,其结果将是无法确定的(整数的最大值约是2.147e9,这是针对32位来说的)。
eg:

2)布尔型以下类型转换为布尔类型的false,其他的转换为true

①0转换为false
②0.0转换为false,var_dump((boolean)0.0);//输出false,var_dump((boolean)'0.0');//输出true
③空白字符""和字符串"0"转换为false
④没有成员的数组array()转换为false
⑤NULL转换为false

3)字符串转换为数字,转换后的数字是从字符串开始部分的数值型字符串,数值型字符串包括正负值和用科学计数法表示的数字。

eg:

> | & ^) 运算时,例如a+b,如果a是开始一个数字值,但包含非数字字符(123a),b不是数字值开始时(b456),就会有A non-numeric value encountered警告。 $result="1.2.3.4"*5; //6 $result=1+"-1.3e3"; //-1299

4)数组

①布尔、数字和字符串转换为数组,将得到一个包含一个该类型数据元素的数组
②NULL转换为数组,会得到一个空数组
③对象转换为一个数组,所得到的数组键名为对象属性名,值为对应对象属性的值

5)其他

①布尔类型转字符串,false转空字符串"",true转"1"
②数组转字符串,是"Array"
③资源转字符串,是"Resource id#1"
④对象转字符串,是"Object",php7测试报error级别错误
⑤对象转字符串浮点数,php5起报e_notice级别错误,输出是float(1);

4、读取变量类型函数

var_dump($var); //常用于测试
②gettype($var);//当变量不是其八种标准变量时,会返回unknown type
③检测变量是否是某种类型的函数: is_bool()、is_float()、is_integer()、is_numeric()、is_string()、is_array()、is_int() 和 is_object()等,若想测试一个变量是否是数字或数字字符串(如表单输入,它们通常为字符串),必须使用 is_numeric()。

转载地址:http://bqmcn.baihongyu.com/

你可能感兴趣的文章
原生谷歌人脸解锁启用
查看>>
递归的函数
查看>>
上升子序列
查看>>
鬼吹灯之龙岭迷窟
查看>>
坚果pro2刷MIUI10
查看>>
坚果pro2救砖(文末包含900E的解决方法)
查看>>
setTimeout和setInterval执行时间问题
查看>>
mouse冒泡事件
查看>>
forEach、some和every关于提前退出
查看>>
改变input (radio,check)的样式
查看>>
vue单选、多选切换,v-model字符串、数组切换
查看>>
滑动鼠标,固定导航栏一直闪烁
查看>>
奇怪!为什么@media起作用,而@media screen and不起作用
查看>>
顶部固定导航栏随着横向滚动条的滚动一起运动
查看>>
jquery获得滚动距离的方法
查看>>
js获取当前点击的元素
查看>>
为什么js代码放在head中报错,放在body中却能正常调用
查看>>
jquery中text()、html()、val()的区别
查看>>
swiper导致图片文字变模糊
查看>>
当图片被压缩时,图片变得模糊
查看>>