4.5 变量的类型
从PHP4开始,PHP中的变量不需要事先声明,赋值即声明。声明和使用这些数据类型前,读者需要了解它们的含义和特性。下面介绍整型、浮点型、布尔值和两个较特殊的类型。
数据类型其实就是所存储数据的种类。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就是浮点型。
由此可见,对于变量而言,如果没有定义变量的类型,则它的类型由所赋值的类型决定。
4.5.1 整型
整型是数据类型中最为基本的类型。在32位运算器中,整型的取值是从-2147483648到+2147483647之间。整型可以表示为十进制、十六进制和八进制。
例如:
3560 //十进制整数 01223 //八进制整数 0x1223 //十六进制整数
4.5.2 浮点型
浮点型表示实数。在大多数运行平台下,这个数据类型的大小为8个字节。它的近似取值范围是2.2E-308到1.8E+308。
例如:
-1.432 1E+07 0.0
4.5.3 布尔值
布尔值只有两个值,就是true和false。布尔值是十分有用的数据类型,通过它,程序实现了逻辑判断的功能。
而对于其他的数据类型,基本都有布尔属性。
(1)整型,为0时,其布尔属性为false;为非零值时,其布尔属性为true。
(2)浮点型,为0.0时,其布尔属性为false;为非零值时,其布尔属性为true。
(3)字符串型,为空字符串“”或者零字符串“0”时,为false;为除此以外的字符串时为true。
(4)数组型,若不含任何元素,为false;只要包含元素,则为true。
(5)对象型,资源型,永远为true。
(6)空型,永远为false。
4.5.4 字符串型
字符串型的数据是表示在引号之间的。引号分为“”双引号和‘’单引号。这两种引号的表示方式都可以表示字符串。
但是这两种表示也有一定区别。
双引号几乎可以包含所有的字符。但是在其中的变量显示的是变量的值,而不是变量的变量名。而有些特殊字符加上“\”这一转义符号就可以了。
单引号内的字符是被直接表示出来的。
下面通过一个案例来讲述上面几种数据类型的使用方法和技巧。
【例4.8】(实例文件:ch04\4.8.php)
<HTML> <HEAD> <title>变量的类型</title> </HEAD> <BODY> <?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; ?> </BODY> </HTML>
本程序运行结果如图4-8所示。
4.5.5 数组型
数组是PHP变量的集合,它是按照“键值”与“值”对应的关系组织数据的。数组的键值可以是整数也可以是字符串。另外,数组不特意表明键值的默认情况下,数组元素的键值为从零开始的整数。
在PHP中,使用list()函数或array()函数来创建数组,也可以直接进行赋值。
下面使用array()函数创造数组。
【例4.9】(实例文件:ch04\4.9.php)
<HTML> <HEAD> <TITLE>数组变量</TITLE> </HEAD> <BODY> <?php $arr=array ( 0=>15, 2=>1E+05, 1=>"开始学习PHP基本语法了", ); for ($i=0;$i<count($arr);$i++) { $arr1=each($arr); echo "$arr1[value]<br>"; } ?> </BODY> </HTML>
本程序运行结果如图4-9所示。
【案例分析】
(1)程序中用“=>”为数组赋值,数组的下标只是存储的标识,数组元素的排列是以加入的先后顺序为准。
(2)本程序采用for循环语句输出整个数组,其中count函数返回数组的个数,echo函数返回当前数组指针的索引/值对,后面章节将详细讲述函数的使用方法。
上面实例的语句可以简化如下。
【例4.10】(实例文件:ch04\4.10.php)
<HTML> <HEAD> <title>数组变量</title> </HEAD> <BODY> <?php $arr=array(15,1E+05,"开始学习PHP基本语法了"); for ($i=0;$i<3;$i++) { echo $arr[$i]<br>"; } ?> </BODY> </HTML>
本程序运行结果如图4-10所示。从结果可以看出,两种写法的运行结果一样。
另外,读者还可以对数组的元素一个一个地进行赋值,下面举例说明。上面的语句可以简化如下。
【例4.11】(实例文件:ch04\4.11.php)
<HTML> <HEAD> <title>数组变量</title> </HEAD> <BODY> <?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>"; } ?> </BODY> </HTML>
本程序运行结果如图4-11所示。从结果可以看出,一个一个赋值的方法和上面两种写法的运行结果一样。
4.5.6 对象型
对象就是类的实例。当一个类被实例化以后,这个生成的对象被传递给一个变量,这个变量就是对象型变量。对象型变量也属于资源型变量。本书的第10章将详细讲述对象。
4.5.7 NULL型
NULL型是仅拥有NULL这一个值的类型。这个类型是用来标记一个变量为空的。一个空字符串与一个NULL是不同的。在数据库存储时会区分空字符串和NULL。NULL型在布尔判断时永远为false。很多情况下,在声明一个变量的时候可以直接先赋值为NULL,如$value = NULL。
4.5.8 资源类型
资源类型也是特殊的数据类型。它表示了PHP的扩展资源,它可以是一个打开的文件,可以是一个数据库连接,甚至可以是其他的数据类型。但是在编程过程中,资源类型却是几乎永远接触不到的。
4.5.9 数据类型之间相互转换
数据从一个类型转换到另外一个类型,就是数据类型转换。在PHP语言中,有两种常见的转换方式:自动数据类型转换和强制数据类型转换。
1.自动数据类型转换
这种转换方法最为常用。直接输入数据的转换类型即可。
例如float型转换为整数int型,小数点后面的数将被舍弃。如果float数超过了整数的取值范围,则结婚过可能是0或者整数的最小负数。
【例4.12】(实例文件:ch04\4.12.php)
<HTML> <HEAD> <TITLE>自动数据类型转换</TITLE> </HEAD> <BODY> <?php $flo1=1.86; echo (int)$flo1."<br>"; $flo2=4E32;//超过整数取值范围 echo(int)$flo2; ?> </BODY> </HTML>
本程序运行结果如图4-12所示。
2.强制数据类型转换
在PHP中,可以使用settype函数强制转换数据类型,基本语法如下:
Bool settype(var,string type)
提 示
type的可能值不能包含资源类型数据。
【例4.13】(实例文件:ch04\4.13.php)
<HTML> <HEAD> <TITLE>强制数据类型转换</TITLE> </HEAD> <BODY> <?php $flo1=1.86; echo setType($flo1,"int"); ?> </BODY> </HTML>
本程序运行结果如图4-13所示。