专题讲座:光盘\MR\Video\4\数据类型.exe
视频速递:数据类型的详细讲解
在计算机的世界里,计算机操作的对象是数据,而每一个数据都有其类型,具备相同类型的数据才可以彼此操作。虽然PHP是弱类型语言,但是在某些特定的场合,仍然需要正确的类型。
PHP的数据类型可以分成三种,即标量数据类型、复合数据类型(即将多个简单数据类型组合在一起,存储在一个变量名中)和特殊数据类型。
标量数据类型是数据结构中最基本的单元,只能存储一个数据。PHP中标量数据类型包括四种,如表4.4所示。
表 4.4 PHP中标量数据类型
下面对各个数据类型进行详细介绍。
布尔型是PHP中较为常用的数据类型之一。它保存一个True或者False值。其中True和False是PHP的内部关键字。设定一个布尔型的变量,只需将True或者False赋值给变量即可。
【例4.9】 通常布尔型变量都是应用在条件或循环语句的表达式中。下面在if条件语句中判断变量$boo中的值是否为True,如果为True,则输出“有您的支持,我们会做得更好~”,否则输出“出错!!”。
本程序完整代码如下。
运行结果如图4.6所示。
图 4.6 在if条件语句中应用布尔型数据
字符串是连续的字符序列,由数字、字母和符号组成。字符串中的每个字符只占用一字节。在PHP中,定义字符串有以下三种方式:
单引号(');
双引号(");
界定符(<<<)。
单引号和双引号是经常被使用的定义方式,定义格式如下。
或
两者的不同之处是:双引号中所包含的变量会自动被替换成实际数值,而在单引号中包含的变量则按普通字符串输出。
【例4.10】 下面的实例分别应用单引号和双引号来输出同一个变量,其输出的结果完全不同,双引号输出的是变量的值,而单引号输出的是字符串“$i”。
本实例完整代码如下。
运行结果如图4.7所示。
两者之间另一处不同点是对转义字符的使用。使用单引号时,只要对“'”进行转义就可以了,但使用双引号“'”时,还要注意“'”、“$”等字符的使用。这些特殊字符都要通过转义字符“\”来显示。常用的转义字符如表4.5所示。
图 4.7 单引号和双引号的区别
表 4.5 转义字符
\n和\r在Windows系统中没有什么区别,都可以当做回车符。但在Linux系统中则是两种效果,在Linux中,\n表示光标回到行首,但仍然在本行;而\r则换到下一行,却不会回到行首。
如果对非转移字符使用了“\”,那么在输出时,“\”也会跟着一起被输出出来。
界定符(<<<)是从PHP 4.0开始支持的。在使用时后接一个标识符,然后是字符串,最后是同样的标识符结束字符串,界定符的格式如下。
其中str为指定的标识符。
【例4.11】 下面应用界定符输出变量中的值,可以看到,它和双引号没什么区别,包含的变量也被替换成实际数值。
(1)首先,编写界定符的开始部分。
(2)其次,编写字符串内容。
(3)最后,编写界定符的结束代码,代码如下。
图 4.8 使用界定符定义字符串
运行结果如图4.8所示。
结束标识符必须单独另起一行,并且不允许有空格。如果在标识符前后有其他符号或字符,则会发生错误。
整型数据类型只能包含整数。在32位的操作系统中,有效的范围是−2 147 483 648~+2 147 483 647。整型数可以用十进制、八进制和十六进制来表示。如果用八进制,数字前面必须加0,如果用十六进制,则需要加0x。
【例4.12】 下面看一个实例,分别输出八进制、十进制和十六进制的结果。
实例位置:光盘\MR\ Instance\4\4.12
本实例完整代码如下。
图 4.9 输出八进制、十进制和十六进制数据
运行结果如图4.9所示。
如果给定的数值超出了int类型所能表示的最大范围,将会被当做float型处理,这种情况叫做整数溢出。同样,如果表达式的最后运算结果超出了int的范围,也会返回float型。
浮点数据类型可以用来存储整数,也可以保存小数。它提供的精度比整数大得多。在32位的操作系统中,有效的范围是1.7E−308~1.7E+308。在PHP 4.0以前的版本中,浮点型的标识为double,也叫双精度浮点数,两者没什么区别。
浮点型数据默认有两种书写格式,一种是标准格式。
还有一种是科学记数法格式。
【例4.13】 下面的实例是输出圆周率的近似值。用了三种书写方法:圆周率函数、传统书写格式和科学记数法,最后显示在页面上的结果都是一样的。
本实例完整代码如下。
图 4.10 输出浮点型的数值
运行结果如图4.10所示。
浮点型的数值只是一个近似值,所以要尽量避免在浮点型之间比较大小,因为最后的结果往往是不准确的。
复合数据类型包括两种(数组和对象),如表4.6所示。
表 4.6 复合数据类型
数组是一组数据的集合,它把一系列数据组织起来,形成一个可操作的整体。数组中可以包括很多数据:标量数据、数组、对象、资源,以及PHP中支持的其他语法结构等。
数组中的每个数据称为一个元素,元素包括索引(键名)和值两个部分。元素的索引只能由数字或字符串组成。元素的值可以是多种数据类型,定义数组的语法格式如下。
或
或
其中参数key是数组元素的下标,value是数组下标所对应的元素。
【例4.14】 和其他语言不同的是,PHP数组的下标除了数字,还可以是字符串的形式,如在下面的实例中使用字符串作为数组的下标(索引),创建一个数组$arr,并且输出数组中的值。
(1)首先,定义变量名为$arr的数组并给数组初始化赋值。
(2)然后,输出数组内容,实例代码如下。
运行结果如下:1 hello
声明数组后,数组中的元素个数还可以自由更改。只要给数组赋值,数组就会自动增加长度。
【例4.15】 下面首先创建一个包含三个元素的数组$arr,然后向$arr数组中添加两个新元素,最后输出数组元素的值。
本实例代码如下。
本实例运行结果为: $arr[2] = s3 $arr[3] = s4 $arr[4] = s5 。
现在,编程语言用到的方法有两种:面向过程和面向对象。在PHP中,用户可以自由使用这两种方法。在本书后面的章节中将对面向对象的技术进行详细介绍。
特殊数据类型包括两种(资源和空值),如表4.7所示。
表 4.7 特殊数据类型
资源是由专门的函数来建立和使用的。它是一种特殊的数据类型,并由程序员分配。在使用资源时,要及时地释放不需要的资源。如果程序员忘记了释放资源,系统自动启用垃圾回收机制,避免内存消耗殆尽。
空值,顾名思义,表示没有为该变量设置任何值,另外,空值(null)不区分大小写,null和NULL效果是一样的。被赋予空值的情况有以下三种:
没有赋任何值;
被赋值null;
被unset()函数处理过的变量。
【例4.16】 下面看一个具体实例。字符串string1被赋值为null,string2根本没有声明和赋值,所以也输出null,最后的string3虽然被赋予了初值,但被unset()函数处理后,也变为null型。unset()函数的作用就是从内存中删除变量。
本实例代码如下。
运行结果如图4.11所示。
虽然PHP是弱类型语言,但有时仍然需要用到类型转换。PHP中的类型转换和C语言一样,非常简单,在变量前加上用括号括起来的类型名称即可。强制转换的类型如表4.8所示。
【例4.17】 下面将一个字符串型变量分别转换成其他数据类型。
图 4.11 被赋值为null的几种情况
表 4.8 强制转换的类型
本实例代码如下。
运行结果如图4.12所示。
图 4.12 将指定字符串型转换成其他类型
在进行类型转换的过程中应该注意以下内容。
转换成boolean型
null、0 和未赋值的变量或数组,会被转换为False,其他的为True。
转换成整型
布尔型的False转为0,True转为1。
浮点型的小数部分被舍去。
字符串型。如果以数字开头,就截取到非数字位,否则输出0。
类型转换还可以通过settype()函数来完成,该函数可以将指定的变量转换成指定的数据类型。
语法:
参数var为指定的变量,参数type为指定的类型,参数type有7个可选值:boolean、float、integer、array、null、object和string。如果转换成功则返回True,否则返回False。
【例4.18】 下面应用settype()函数将指定的字符串进行类型转换,可以将本实例的运行结果与上一实例中的结果进行比较,看有什么不同。
定义变量,利用settype函数分别将该变量进行变量类型转换,程序代码如下。
图 4.13 应用settype()函数对字符串的类型进行转换
运行结果如图4.13所示。
可以看到,当字符串转换为整型或浮点型时,如果字符是以数字开头的,就会先把数字部分转换为整型,再舍去后面的字串。如果数字中含有小数点,则会取到小数点前一位。
settype()函数改变了变量自身的类型,而不像实例4.17中,只是改变变量的输出结果,而不改变变量本身的类型。在实际应用中,可根据情况自行选择转换方式。
PHP还内置了检测数据类型的系列函数,可以对不同类型的数据进行检测,判断其是否属于某个类型。检测数据类型的函数如表4.9所示。
【例4.19】 由于检测数据类型的函数的功能和用法都是相同的,下面应用is_numeric()函数来检测变量中的数据是否是数字。
表 4.9 检测数据类型的函数
操作步骤为:先定义一个字符串变量,然后利用is_numeric()函数通过if语句判断结果,本实例代码如下。
本实例运行结果: Yes,This is a phone number! 。