数据类型的分类
1.标量类型
也可以理解为简单类型、基本类型。包含以下4种类型:
字符串 string
整数类型 int
浮点类型 float double
布尔类型 bool boolean
2. 复合类型
数组
对象
3. 特殊类型
空类型null: 有且只有一个数据可以使用,那就是null。
资源类型resource:表示一种外部的可供php使用(操作)的资源(比如图片,数据库,文件等)。
整型数据类型
1.四种书写形式
10进制形式:
$a = 123;
8进制形式:
$b = 0123; // 以0开头,只能出现0-7这8个数字
16进制形式:
$c = 0x12A34 // 以0x开头,可以出现0-9,A-F这16个数字
2进制形式:
$d = 0b1011011010; // 以0b开头,只能出现0和1这2个数字
2.进制之间的相互转换
通过函数来进行转换。
10进制转2、8、16进制
decbin():将10进制转为2进制
decoct():将10进制转为8进制
dechex():将10进制转为16进制
2、8、16进制转换成10进制
bindec():将2进制数字字符串转为10进制
octdec():将8进制数字字符串转为10进制
hexdec():将16进制数字字符串转为10进制
浮点数据类型
浮点数就是相当于数学上的“小数”
两种书写形式:
常规形式(带小数点):
$f1 = 0.1; //或者1.23; 123.0;
科学计数法形式(带e):
$f2 = 1.23e3; //表示1.23 乘以10的3次方
$f3 = 123e2; //这个也是浮点数,虽然其结果值是一个“整数”(12300)
特别注意:浮点数不要随便做相等比较(==):因为浮点数进行相等比较,是“不可靠”的:
$v1 = 0.1 + 0.2;
$v2 = 0.3;
问:$v1和$v2相等吗?
那怎么办?
需要在考虑精度的基础上,将浮点数转换为整数,然后进行“比较大小”,此时,在精度范围内,如果相等,我们 就认为是相等的。将上述程序改造为:
布尔类型boolean
只有两个数据值: true, false(不区分大小写)
在需要当做“布尔值”进行判断或比较的时候,以下数据会被当作布尔值的 false:
false, 0, 0.0, “”, null, ‘0’, 空数组
其余都被当做布尔值的 true。
字符串string
可以使用单引号或双引号来表示(引起来)。
表示一串“连续的字符”,最短的字符串是“空字符串”,比如: $str1 = “”。
注意:这个不是空字符串: “ ”, 因为其中包括了1个空格字符。
$name = “张三”;
$edu = ‘北京大学’;
$title = “关于微信应用的几个改进建议”; //文章标题
$v1 = ‘’; //这也是字符串(空字符串), 跟null不同!!!
$v2 = ‘123’; //这还是字符串
$v3 = “false”; //这仍然是字符串
特别注意:
双引号字符串中,如果出现“$”符号,则该符号后的连续字符(单词)会被识别为一个变量名。
如果识别成功(即确实存在该变量),则会将该变量转换为实际内容。
如果识别失败(即实际没有该变量),则会报错。
数组类型array
数组,就是将多个“数据”放在一起,排成一个有序序列,这个序列作为一个整体(里面包括了多个数据),就称 为“数组”。比如:
$info1 = array(‘张三丰’, 18, “男” );
//新版本中,还可以这样写: [‘张三丰’, 18, “男” ]
或: $info2 = array(‘name’ => ‘张三丰’, ‘age’=>18, ‘gender’ => “男” );
空类型NULL
只有一个值: null(不区分大小写)。
$v1 = null; //此时,具有变量$v1,但其中的数据是“空的”(没有数据)
空值变量,isset()判断的结果是false(即不存在)。
类型判断
gettype(): 获取一个变量的类型,结果为一个变量类型的名称(字符串)
$v1 = 10;
$r1 = gettype( $v1 ); //结果为:“integer”
$v2 = ‘abc’;
$r2 = gettype( $v2 ); //结果为:“string”
$v3 = 1.23;
$r3 = gettype( $v3 ); //结果为:“double”(返回的是double,但其实就是我们所说的float类型)
settype(): 设置一个变量的类型
$v1 = 10; //此时,$v1中数据是整数类型
settype( $v1, ‘string’); //此时,$v1是字符串类型,即其中的数据变成了:“10”
echo gettype( $v1 ); //”string”
var_dump(): 输出变量的“完整信息”,包括变量类型,长度(如果需要),内容
判断是否为某种类型(类型系列函数):
is_int() / is_integer():判断是否为整数类型
is_float():判断是否为浮点类型
is_bool():判断是否为布尔类型
is_string():。。。
is_array():。。。
is_numeric():判断是否为“数字”类型(含整数,小数,以及“纯数字字符串”)
is_object():
两个特殊判断:
isset(): 判断一个变量是否存在,或变量中是否有数据,有则返回true,否则返回false。
如果变量中有数据,返回true
如果变量中没有有数据,返回false
empty():判断是否为“空的”。如果确实是“空的”,返回true,否则返回false。
如果变量中的数据为空的,返回true
如果变量中的数据不是空的,返回false
“ 空的”的意思,比较接近日常生活中的“没有”。以下值都是空的(empty):
0, 0.0, “”, “0”, false, array(), //这几项,empty判断的结果都是true
而空(null)是一个计算机中的特殊概念,表示“完全不存在”,可以理解为“真空”。
类型转换
1 自动转换
我们无需做任何处理,而是,程序会根据运算时运算符所需要的数据类型进行转换。
如果参与运算的数据不是需要的类型,则会自动转换为需要的数据类型。
$v1 = 1 + “3”; //结果是4;
$v2 = 1 . “3”; //“.”是字符串连接符,这里,1会被转换为字符串,结果是:“13”
典型自动转换:
转换为数字:
1+”2” //3
“1” + “2” //3
1 + ”2abc” //3
1 + ”2abc34” //3
1 + “abc” //1
1 + “abc2” //1
1.2 + “2” //3.2
1.2 + “2.2abc” //3.4
1.2 + “abc2.2” //1.2
“1.2abc” + 2 //3.2
“1.2abc” + “2abc” //3.2
规律:一个字符串当做数字,就会将该字符串的最前面的数字转换为数字值,如果没有,就为0
转换为整数(直接保留整数部分):
10.8 % 3.6 // 先两边取整,再取余 1
“10.8” % “3.6”
“10.8” % “3.6abc”
“10.8ab” % “3.6cd”
2 强制转换
人为使用强转换语法进行转换,比如:
$v1 = (int) “1”; //结果,$v1是整数类型的1
$v2 = (float) “1.23”; //结果,$v2是浮点类型的1.23
$v3 = (string) $v1; //结果,$v3是字符串“1”