数据类型
整体划分
- 标量类型:int,float,string,bool
- 复合类型:array,object
- 特殊类型:null,resource
整数类型 :int,integer
3种整数表示法
- 十进制写法:123
$n1=123;
- 八进制写法:0123
$n2=0123;
- 十六进制写法:0x123
$n3=0x123
进制转换
Dec 十进制 bin 二进制 oct 八进制 hex 十六进制
- 十进制转为二进制decbin(),除二取余倒着写
$v1=decbin(123); //decbin函数内为十进制,$v1为123的二进制
基本做法:将十进制数字除以二并取得余数,如果除得的商不为0,则继续除以2并取得余数直到商为0.然后将所有的余数按“倒序写出”,就是对应的2进制数字
- 十进制转为八进制decoct(),除以八取余倒着写
$r1=decoct(123); //与上面类似
基本做法:将十进制数字除以八并取得余数,如果除得的商不为0,则继续除以八并取得的余数直到商为0,然后将所有的余数“倒序写出”,就是对应的八进制数字
基本做法:将十进制数字除以16并取得余数,如果除得的商不为0,则继续除以16并取得的余数直到商为0,然后将所有的余数“倒序写出”,就是对应的16进制数字
- 十进制转为16进制dechex(),除以16取余倒着写
- 二进制、八进制、十六进制转化为十进制:
Bindec(),octdec(),hexdec()函数分别代表转化函数
基本做法:每位数字乘以2的权值然后相加
运行结果:
注意:十进制转为其他进制结果是字符串,其他进制转为十进制要求给定数据的字符串形式
思考:
$v1=bindec(123); //理解过程:bindec(“123”)=>bindec(“1”)=>1
$v2=bindec(0123);//理解:0123是8进制数字,其十进制是83,再当作二进制字符串“83”,其值为0;
$v3=bindec(“0123”)//理解,“0123”就是一个字符串,其值为1
$v4=octdec(0123) //理解,0123是8进制数字,其十进制是83,再当作8进制字符串“83”,其值为3
浮点类型:float,double,real
两种写法:
$v1=1.234; //带小数点就是浮点类型
$v2=1.234E3;//带E的形式就是浮点类型
$v3=1234E3;//浮点类型
关于浮点数的细节知识
- 十进制小数转二进制小数的做法:小数部分乘2并顺序取整数部分—没有系统函数
- 浮点数不应该直接进行大小写比较
因为浮点数在系统内部(cpu级别),很可能都是不精确表达。
要想进行比较,只能考虑自己应用中的精度要求的基础上将其转换为整数进行比较
通常做法是:乘以10的精度位数数字方,比如精度要求三位有效数字就乘以1000
当整数运算的结果超出整数的范围后会自动转化浮点数
字符串类型string
Js中,虽然有两种字符串表达形式,但也应该理解成一种
Var str1=‘单引号字符串’;
Var st2=”双引号字符串”;
但在php中,单引号和双引号字符串是由不同细节的字符串
PHP中,有4种字符串形式
单引号字符串:
结果:
双引号字符串:
结果:
Nowdoc(单引号)定界字符串:
结果为:
Heredoc(双引号)定界字符串:
结果为:
布尔类型:bool,boolean
用于标识某种只有两个状态值的数据:true,false
在应用中,常常需要直接将一个数据(可能是各种其他类型)当做布尔值来进行判断
发生:将数据隐含转换为布尔值。
最常见的语法形式:
If( 某数据/变量){
……
}
在PHP中,其他各种数据隐含转换为布尔值的时候会当做false的有:
0
0.0
Null
“”
“0”
Array(); //空数组
未定义的变量 //尽量避免
其他的数据当true