3.5 数据类型
从PHP 4开始,PHP中的变量不需要事先声明,赋值即可声明。在使用这些数据类型前,读者需要了解它们的含义和特性。下面介绍整型、浮点型、布尔型、字符串型、数组型、对象型以及NULL和Resource两个比较特殊的类型。
3.5.1 什么是类型
不同的数据类型其实就是所存储数据的不同种类。PHP的不同数据类型主要包括:
● 整型(integer),用来存储整数。
● 浮点型(float),用来存储实数。
● 字符串型(string),用来存储字符串。
● 布尔型(boolean),用来存储真(true)或假(false)。
● 数组型(array),用来存储一组数据。
● 对象型(object),用来存储一个类的实例。
作为弱类型语言,PHP也被称为动态类型语言。在强类型语言,例如C语言中,一个变量只能存储一种类型的数据,并且这个变量在使用前必须声明变量类型。而在PHP中,给变量赋什么类型的值,这个变量就是什么类型,例如以下几个变量:
$hello = "hello world";
由于hello world是字符串,因此变量$hello的数据类型就是字符串类型。
$hello = 100;
同样,由于100为整型,因此$hello也就是整型。
$wholeprice = 100.0;
由于100.0为浮点型,因此$wholeprice就是浮点型。
由此可见,对于变量而言,如果没有定义变量的类型,则它的类型由所赋值的类型决定。
3.5.2 整型
整型(integer)是数据类型中最为基本的类型。在现有的32位运算器的情况下,整型的取值是从-2147483648到+2147483647。整型可以表示为十进制、十六进制和八进制。
例如:
3560 //十进制整数 01223 //八进制整数 0x1223 //十六进制整数
3.5.3 浮点型
浮点型(floating-point)就是表示实数。在大多数运行平台下,这个数据类型的大小为8个字节。它的近似取值范围是2.2E-308~1.8E+308(科学计数法)。
例如:
-1.432 1E+07 0.0
3.5.4 布尔型
布尔型(boolean)只有两个值,就是true和false。布尔型是十分有用的数据类型,通过它,程序实现了逻辑判断的功能。
其他的数据类型基本都有布尔属性:
● 整型,为0时,其布尔属性为false,为非零值时,其布尔属性为true。
● 浮点型,为0.0时,其布尔属性为false,为非零值时,其布尔属性为true。
● 字符串型,为空字符串“”或者零字符串“0”时,其布尔属性为false,包含除此以外的字符串时其布尔属性为true。
● 数组型,若不含任何元素,其布尔属性为false,只要包含元素,则其布尔属性为true。
● 对象型,资源型,其布尔属性永远为true。
● NULL型,其布尔属性永远为false。
3.5.5 字符串型
字符串型(string)的数据是表示在引号之间的。引号分为双引号(" ")和单引号(' ')。这两种引号可以表示字符串,但是这两种表示方法也有一定区别。
双引号几乎可以包含所有的字符,但是在其中的变量显示变量的值,而不是变量的变量名,而有些特殊字符加上“\”符号就可以了;单引号内的字符是被直接表示出来的。
下面通过一个案例来讲述整型、浮点型、布尔型和字符串型数据的使用方法和技巧。
【例3.10】(实例文件:ch03\3.10.php)
<? php $int1= 2012; // 十进制整数 $int2= 01223; //八进制整数 $int3=0x1223; //十六进制整数 echo "输出整数类型的值:"; echo $int1; echo "\t"; //输出一个制表符 echo $int2; //输出659 echo "\t"; echo $int3; //输出4643 echo "<br />"; $float1=54.66; echo $float1; //输出54.66 echo "<br />"; echo "输出布尔型变量:"; echo (Boolean)( $int1); //将int1整型转化为布尔变量 echo "<br />"; $string1="字符串类型的变量"; echo $string1; ?>
本程序运行结果如图3-10所示。
图3-10 程序运行结果
3.5.6 数组型
数组(array)是PHP变量的集合,是按照“键值”与“值”的对应关系组织数据的。数组的键值既可以是整数,也可以是字符串。另外,数组不特意表明键值的默认情况下,数组元素的键值为从零开始的整数。
在PHP中,使用list()函数或array()函数来创建数组,也可以直接进行赋值。
下面使用array()函数创建数组。
【例3.11】(实例文件:ch03\3.11.php)
<? php $arr=array // 定义数组并赋值 ( 0=>15, 2=>1E+05, 1=>"开始学习PHP基本语法了", ); for ($i=0; $i<count($arr); $i++) // 使用for循环输出数组内容 { $arr1=each($arr); echo "$arr1[value]<br />"; } ?>
本程序运行结果如图3-11所示。
图3-11 程序运行结果
【案例分析】
(1)程序中用“=>”为数组赋值,数组的下标只是存储的标识,没有任何意义,数组元素的排列以加入的先后顺序为准。
(2)本程序采用for循环语句输出整个数组,其中count函数返回数组的个数,echo函数返回当前数组指针的索引值对,后面的章节将详细讲述echo函数的使用方法。
上面实例的语句可以简化如下。
【例3.12】(实例文件:ch03\3.12.php)
<? php $arr=array(15,1E+05, "开始学习PHP基本语法了"); // 定义数组并赋值 for ($i=0; $i<3; $i++) { echo $arr[$i]<br />"; } ?>
本程序运行结果如图3-12所示。从结果可以看出,这两种写法的运行结果相同。
图3-12 程序运行结果
另外,读者还可以对数组的元素一个一个地赋值,下面举例说明。上面的语句可以简化如下。
【例3.13】(实例文件:ch03\3.13.php)
<? php $arr[0]=15; // 对数组元素分别赋值 $arr[2]= 1E+05; $arr[1]= "开始学习PHP基本语法了"; for ($i=0; $i<count($arr); $i++) { $arr1=each($arr); echo "$arr1[value]<br />"; } ?>
本程序运行结果如图3-13所示。从结果可以看出,一个一个赋值的方法和上面两种写法的运行结果一样。
图3-13 程序运行结果
3.5.7 对象型
对象(object)就是类的实例。当一个类被实例化以后,这个被生成的对象被传递给一个变量,这个变量就是对象型变量。对象型变量也属于资源型变量。
3.5.8 NULL型
NULL类型是仅拥有NULL这个值的类型。这个类型用来标记一个变量为空。一个空字符串与NULL是不同的。在数据库存储时会把空字符串和NULL区分开处理。NULL型在布尔判断时永远为false。很多情况下,在声明一个变量的时候可以直接先赋值为NULL型,如$value = NULL。
3.5.9 资源类型
资源(resource)类型是十分特殊的数据类型。它表示PHP的扩展资源,可以是一个打开的文件,也可以是一个数据库连接,甚至可以是其他的数据类型。但是在编程过程中,资源类型却是几乎永远接触不到的。
3.5.10 数据类型之间的相互转换
数据从一种类型转换到另外一种类型,就是数据类型转换。在PHP语言中,有两种常见的转换方式:自动数据类型转换和强制数据类型转换。
1.自动数据类型转换
这种转换方法最为常用,直接输入数据的转换类型即可。例如,float型转换为整数int型,小数点后面的数将被舍弃。如果float数值超过了整数的取值范围,则结果可能是0或者整数的最小负数。
【例3.14】(实例文件:ch03\3.14.php)
<? php $flo1=1.86; // 定义float类型 echo (int)$flo1."<br />"; // 转换为整数类型输出 $flo2=4E32; // 超过整数取值范围 echo(int)$flo2; ?>
本程序运行结果如图3-14所示。
图3-14 程序运行结果
2.强制数据类型转换
在PHP中,可以使用settype函数强制转换数据类型,基本语法如下。
Bool settype(var, string type)
注意:type的可能值不能包含资源类型数据。
【例3.15】(实例文件:ch03\3.15.php)
<? php $flo1=1.86; // 定义浮点型数据 echo settype($flo1, "int"); // 强制转换数据为整数并输出 ?>
本程序运行结果如图3-15所示。
图3-15 程序运行结果