开发者学堂课程【PHP 基础入门课程(上) :类型转换】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/709/detail/12598
类型转换
内容介绍
一、目标概念
二、步骤
三、示例
四、常见转换逻辑
五、小结
一、目标概念
如果某一项的数据,比如某一种数据的一个类型,它是一种字符串类型。
这个在网站开发的时候非常常见,但是此时如果需要参与运算的,那就是数值。
那么此时就必须要用到什么类型转换,来看一下概念。类型转换就是将某种不符合的类型转换成我们目标所要的类型。
在 PHP 中提供了两种的类型转换的方式,第一种叫做自动转换,系统它根据所需要的类型,当然它根据的是一个参与运算的一个目标,去自动转换成目标类型,比较方便。第二种叫做强制转换。
人为地在进行某项运算之前,先把数据强制转换成目标类型,那么这样对于计算机而言,忽略了自己去判定的一种方式,直接就会把这个目标转换成一个目标类型,它的效率是比较高的。
二、步骤
1、自动转换
自动转换其实很简单,就是系统它会自动检测当前参与运算所需要的类型是什么。
然后他在检测我们当前提供的数据是什么类型,最后,就会把它自动转换成一个目标类型。它有一个特点,它不改变数据本身。
2、强制转换
强制类型转换,首先要明确所需要的类型是什么,这个地方参与运算,需要提供什么数据。
确定了之后,就把目标的一个数据类型,做一个强制要求就可以了,再把数据拿过来,把它转换成对应的类型就可以了。
这个里面转换有两种方式,第一种叫不改变原来的数据,原来什么样子,数据是什么,不改变,就要当前的一个数据。
第二个就是要改变它的一个类型。那么此时要用到一个函数,把这个变量转换成你目标,想要的一个类型,原来的数据没有了,因为被我=强制给转换了,会把结果调整过来。
这就是强制的两种方式,强制要转换成的类型的话,有很多。其中资源跟 NULL 类型不能够进行强制转。只能转换成基本类型。
integer:转换成整型
ofloat:转换成浮点型
obool:转换成布尔类型
ostring:转换成字符串类型
oarray:转换成数组类型
oobject:转换成对象类型
三、示例
这里以一个数值和字符串作为示例
#定义数据:假装是外来数据$num1 = 5;
$num2 = '1.23a';
#算术运算:求和(自动转换):只能是数值操作
echo $num1+ $num2: #6.23
#系统判定当前是加法操作,需要数值类型(整型|浮点型)
#系统判定当前参与运算的数据类型:$num1 是整型,$num2 是字符串型
#系统自动转换不符合目标的类型编程目标类型:$num2 ==> 数值型(浮点型) ==>1.23
var_dump($num2);
#string(5),依然是字符串,值也是'1.23a',没有改变
#算术运算:求和(强制转换):只能是数值操作(不改变类型 echo (float)$num1+(float)$num2: #6.23
var_dump($num1.$num2); #int 100, string(5) '1.23a'
#强制转换:
改变类型(一般比较少用,除非是特定位置) settype($num1,'float'); settype($num2,'float');
var_dump($num1,$num2); #float 100,float 1.23
以上的这个过程就是自动转换和强制转换,而强制转换分两种,一种改变数值本身是一种不改变,那么这种其实用的比较少,通常不会改变数据太多,只是说把它拿来变成我们想要的数据,参与运算就可以了。
但是这种也会用到,也会用到,因为要保证安全。
四、常见转换逻辑
1、字符串转数值
纯数值字符串=》相应数值:"123.1'=> 123.1
数字开头但有字母=》保留数字部分:'12a'=> 12
小数点开头=》保留第一个小数点及之后的连续数字:.1.1.a=> 0.1·字母开头=》0:_a123'=> 0
然后找小数点在找小数点后的数值,这样的话可以组建成有效的一个数值。如果是字母开头,那就是零。
2、其他类型转布尔
极少转换后是 FALSE,基本都是 TRUE,以下除外
布尔 FALSE 转布尔: FALSE ·整型0转布尔: FALSE
浮点型0.0转布尔: FALSE
空白字符串"和字符串'0"转布尔:FALSE
空数组 array() 转布尔: FALSE (比较多运用)·空类型 NULL 转布尔: FALSE
五、小结
1、类型转换是根据目标需求(运算)将数据变成目标格式
自动转换(PHP 用的最多):
系统自动识别。强制转换(建议):开发者限定
对值进行类型控制:
在变量前使用:(目标类型),不会改变变量本身。对变量进行类型重置:使用settype,会改变变量
2、类型转换逻辑
字符串转数值。其他类型转布尔
较多转都是布尔 true。极少数转成 false