3.3 PHP的数据类型

3.3 PHP的数据类型

PHP支持8种原始类型,包括4种标量类型,即boolean(布尔型)、integer(整型)、float/double(浮点型)和string(字符串型);2种复合类型,即array(数组)和object(对象);2种特殊类型,即resource(资源)与null。

说明

PHP中变量的类型通常不是由程序员设定的,确切地说,是PHP根据该变量使用的上下文在运行时决定的。

3.3.1 标量数据类型

视频讲解:光盘TMlx303 标量数据类型.mp4

标量数据类型是数据结构中最基本的单元,只能存储一个数据。PHP中标量数据类型包括4种,如表3.1所示。

表3.1 标量数据类型

1.布尔型(boolean)

布尔型是PHP中较为常用的数据类型之一,它保存一个true值或者false值,其中true和false是PHP的内部关键字。设定一个布尔型的变量,只需将true或者false赋值给变量即可。

【例3.1】通常布尔型变量都是应用在条件或循环语句的表达式中。下面在if条件语句中判断变量$boo中的值是否为true,如果为true,则输出“变量$boo为真!”,否则输出“变量$boo为假!! ”,实例代码如下:(实例位置:光盘TMsl31)

<?php $boo=true; //声明一个boolean类型变量,赋初值为true if($boo==true) //判断变量$boo是否为真 echo’变量$boo为真!'; //如果为真,则输出“变量$boo为真!”的字样 else echo’变量$boo为假!! '; //如果为假,则输出“变量$boo为假!! ”的字样 ?>

结果为:变量$boo为真!

注意

在PHP中不是只有false值才为假的,在一些特殊情况下boolean值也被认为是false。这些特殊情况为0、0.0、"0"、空白字符串("")、只声明没有赋值的数组等。

说明

美元符号$是变量的标识符,所有变量都是以$开头的,无论是声明变量还是调用变量,都应使用$。

2.字符串型(string)

字符串是连续的字符序列,由数字、字母和符号组成。字符串中的每个字符只占用一个字节。在PHP中,有3种定义字符串的方式,分别是单引号(')、双引号(")和定界符(<<<)。

单引号和双引号是经常被使用的定义方式,定义格式如下:

<?php $a =’字符串’; ?>

<?php $a ="字符串"; ?>

两者的不同之处在于,双引号中所包含的变量会自动被替换成实际数值,而单引号中包含的变量则按普通字符串输出。

【例3.2】下面的实例分别应用单引号和双引号来输出同一个变量,其输出结果完全不同,双引号输出的是变量的值,而单引号输出的是字符串“$i”。实例代码如下:(实例位置:光盘TMsl32)

<?php $i=’只会看到一遍’; //声明一个字符串变量 echo"$i"; //用双引号输出 echo"<p>"; //输出段标记 echo'$i'; //用单引号输出 ?>

运行结果如图3.1所示。

图3.1 单引号和双引号的区别

两者之间另一处不同点是对转义字符的使用。使用单引号时,要想输出单引号,只要对单引号(')进行转义即可,但使用双引号(")时,还要注意“"”“$”等字符的使用。这些特殊字符都要通过转义符“”来显示。常用的转义字符如表3.2所示。

表3.2 转义字符

n和在Windows系统中没有什么区别,都可以当作回车符。但在Linux系统中则是两种效果,在Linux中,n表示换到下一行,却不会回到行首;而表示光标回到行首,但仍然在本行。如果读者使用Linux操作系统,可以尝试一下。

注意

如果对非转义字符使用了“”,那么在输出时,“”也会跟着一起被输出。

说明

在定义简单的字符串时,使用单引号是一个更加合适的处理方式。如果使用双引号,PHP将花费一些时间来处理字符串的转义和变量的解析。因此,在定义字符串时,如果没有特别的要求,应尽量使用单引号。

定界符(<<<)是从PHP 4开始支持的。在使用时后接一个标识符,然后是字符串,最后是同样的标识符结束字符串。定界符的格式如下:

$string = <<< str 要输出的字符串 str

其中,str为指定的标识符。

【例3.3】下面使用定界符输出变量中的值,可以看到,它和双引号没什么区别,包含的变量也被替换成实际数值,实例代码如下:(实例位置:光盘TMsl33)

<?php $i=’显示该行内容’; //声明变量$i echo <<<std 这和双引号没有什么区别,$i同样可以被输出出来。<p> $i的内容为:$i std; ?>

运行结果如图3.2所示。

图3.2 使用定界符定义字符串

注意

结束标识符必须单独另起一行,并且不允许有空格。在标识符前后有其他符号或字符,也会发生错误。

3.整型(integer)

整型数据类型只能包含整数。在32位的操作系统中,有效的范围是-2147483648~+2147483647。整型数可以用十进制、八进制和十六进制来表示。如果用八进制,数字前面必须加0;如果用十六进制,则需要加0x。

注意

如果在八进制中出现了非法数字(8和9),则后面的数字会被忽略掉。

【例3.4】本例分别输出八进制、十进制和十六进制的结果,实例代码如下:(实例位置:光盘TMsl34)

<?php $str1=1234567890; //声明一个十进制的整数 $str2=0x1234567890; //声明一个十六进制的整数 $str3=01234567890; //声明一个八进制的整数 $str4=01234567; //声明另一个八进制的整数 echo ’数字1234567890不同进制的输出结果:<p>'; echo’十进制的结果是:'.$str1.'<br>'; //输出十进制整数 echo’十六进制的结果是:'.$str2.'<br>'; //输出十六进制整数 echo ’八进制的结果是:'; if($str3==$str4){ //判断$str3和$str4的关系 echo'$str3=$str4='.$str3; //如果相等,输出变量值 }else{ echo'$str3! =str4'; //如果不相等,输出“$str3! =$str4” } ?>

运行结果如图3.3所示。

图3.3 不同进制的输出结果

注意

如果给定的数值超出了int型所能表示的最大范围,将会被当作float型处理,这种情况称为整数溢出。同样,如果表达式的最后运算结果超出了int型的范围,也会返回float型。

4.浮点型(float)

浮点数据类型可以用来存储数字,也可以保存小数。它提供的精度比整数大得多。在32位的操作系统中,有效的范围是1.7E-308~1.7E+308。在PHP 4.0以前的版本中,浮点型的标识为double,也叫作双精度浮点数,两者没有区别。

浮点型数据默认有两种书写格式,一种是标准格式:

3.1415 -35.8

还有一种是科学记数法格式:

3.58E1 849.72E-3

【例3.5】本例中输出圆周率的近似值。用3种书写方法:圆周率函数、传统书写格式和科学记数法,最后显示在页面上的效果都一样。实例代码如下:(实例位置:光盘TMsl35)

<?php echo ’圆周率的3种书写方法:<p>'; echo’第一种:pi()='. pi().'<p>'; //调用pi()函数输出圆周率 echo’第二种:3.14159265359='.3.14159265359.'<p>'; //传统书写格式的浮点数 echo’第三种: 314159265359E-11='.314159265359E-11.'<p>'; //科学记数法格式的浮点数 ?>

运行结果如图3.4所示。

图3.4 输出浮点类型

注意

浮点型的数值只是一个近似值,所以要尽量避免浮点型数值之间比较大小,因为最后的结果往往是不准确的。

3.3.2 复合数据类型

视频讲解:光盘TMlx304 复合数据类型.mp4

复合数据类型包括两种,即数组和对象,如表3.3所示。

表3.3 复合数据类型

1.数组(array)

数组是一组数据的集合,它把一系列数据组织起来,形成一个可操作的整体。数组中可以包括很多数据,如标量数据、数组、对象、资源以及PHP中支持的其他语法结构等。

数组中的每个数据称为一个元素,元素包括索引(键名)和值两个部分。元素的索引可以由数字或字符串组成,元素的值可以是多种数据类型。定义数组的语法格式如下:

$array = array('value1', ' value2 '…)

$array[key] = 'value'

$array = array(key1 => value1, key2 => value2…)

其中,key是数组元素的下标,value是数组下标所对应的元素。以下几种都是正确的格式:

$arr1 = array('This', 'is', 'an', 'example'); $arr2 = array(0 => 'php', 1=>'is', 'the' => 'the', 'str' => 'best '); $arr3[0] = 'tmpname';

声明数组后,数组中的元素个数还可以自由更改。只要给数组赋值,数组就会自动增加长度。在第7章 PHP数组中,会详细介绍数组的使用、取值以及数组的相关函数。

2.对象(object)

编程语言所应用到的方法有两种:面向过程和面向对象。在PHP中,用户可以自由使用这两种方法。在第13章中将对面向对象的技术进行详细的讲解。

3.3.3 特殊数据类型

视频讲解:光盘TMlx305 特殊数据类型.mp4

特殊数据类型包括资源和空值两种,如表3.4所示。

表3.4 特殊数据类型

1.资源(resource)

资源类型是PHP 4引进的。关于资源的类型,可以参考PHP手册后面的附录,里面有详细的介绍和说明。

在使用资源时,系统会自动启用垃圾回收机制,释放不再使用的资源,避免内存消耗殆尽。因此,资源很少需要手工释放。

2.空值(null)

空值,顾名思义,表示没有为该变量设置任何值。另外,空值(null)不区分大小写,null和NULL效果是一样的。被赋予空值的情况有以下3种:还没有赋任何值、被赋值null、被unset()函数处理过的变量。

【例3.6】下面来看一个具体实例。字符串string1被赋值为null, string2根本没有声明和赋值,所以也输出null,最后的string3虽然被赋予了初值,但被unset()函数处理后,也变为null型。unset()函数的作用就是从内存中删除变量。实例代码如下:(实例位置:光盘TMsl36)

<?php echo "变量($string1)直接赋值为null:"; $string1=null; //变量$string1被赋空值 $string3="str"; //变量$string3被赋值str if(! isset($string1)) //判断$string1是否被设置 echo "string1 = null"; echo "<p>变量($string2)未被赋值:"; if(! isset($string2)) //判断$string2 是否被设置 echo "string2 = null"; echo "<p>被unset()函数处理过的变量($string3):"; unset($string3); //释放$string3 if(! isset($string3)) //判断$string3是否被设置 echo "string3 = null"; ?>

运行结果如图3.5所示。

图3.5 被赋值为null的几种情况

说明

is_null()函数用于判断变量是否为null,该函数返回一个boolean型,如果变量为null,则返回true,否则返回false。unset()函数用来销毁指定的变量。

注意

从PHP 4开始,unset()函数就不再有返回值,所以不要试图获取或输出unset()。

3.3.4 数据类型转换

视频讲解:光盘TMlx306 数据类型转换.mp4

虽然PHP是弱类型语言,但有时仍然需要用到类型转换。PHP中的类型转换和C语言一样,非常简单,只需在变量前加上用括号括起来的类型名称即可。允许转换的类型如表3.5所示。

表3.5 类型强制转换

注意

在进行类型转换的过程中应该注意以下内容:转换成boolean型时,null、0和未赋值的变量或数组会被转换为false,其他的为true;转换成整型时,布尔型的false转换为0, true转换为1,浮点型的小数部分被舍去,字符型如果以数字开头就截取到非数字位,否则输出0。

类型转换还可以通过settype()函数来完成,该函数可以将指定的变量转换成指定的数据类型。

bool settype ( mixed var, string type )

其中,var为指定的变量;type为指定的类型,它有7个可选值,即boolean、float、integer、array、null、object和string。如果转换成功,则返回true,否则返回false。

当字符串转换为整型或浮点型时,如果字符串是以数字开头的,就会先把数字部分转换为整型,再舍去后面的字符串;如果数字中含有小数点,则会取到小数点前一位。

【例3.7】本例将使用上面的两种方法将指定的字符串进行类型转换,比较两种方法之间的不同。实例代码如下:(实例位置:光盘TMsl37)

<?php $num='3.1415926r*r'; //声明一个字符串变量 echo ’使用(integer)操作符转换变量$num类型:'; echo(integer)$num; //使用integer转换类型 echo '<p>'; echo’输出变量$num的值:'.$num; //输出原始变量$num echo '<p>'; echo ’使用settype函数转换变量$num类型:'; echo settype($num, 'integer'); //使用settype()函数转换类型 echo '<p>'; echo’输出变量$num的值:'.$num; //输出原始变量$num ?>

运行结果如图3.6所示。

图3.6 类型转换

可以看到,使用integer操作符能直接输出转换后的变量类型,并且原变量不发生任何变化。使用settype()函数返回的是1,也就是true,而原变量被改变了。在实际应用中,可根据情况自行选择转换方式。

3.3.5 检测数据类型

视频讲解:光盘TMlx307 检测数据类型.mp4

PHP内置了检测数据类型的系列函数,可以对不同类型的数据进行检测,判断其是否属于某个类型,如果符合则返回true,否则返回false。检测数据类型的函数如表3.6所示。

表3.6 检测数据类型的函数

【例3.8】由于检测数据类型的函数的功能和用法都是相同的,下面使用is_numeric()函数来检测变量中的数据是否为数字,从而了解并掌握is系列函数的用法。实例代码如下:(实例位置:光盘TMsl38)

<?php $boo="043112345678"; //声明一个全由数字组成的字符串变量 if(is_numeric($boo)) //判断该变量是否由数字组成 echo"Yes, the$boo is a phone number: $boo! "; //如果是,输出该变量 else echo"Sorry, This is an error! "; //否则,输出错误语句 ?>

结果为:Yes, the $boo is a phone number:043112345678!

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

微信扫一扫

微信扫一扫

微信扫一扫,分享到朋友圈

3.3 PHP的数据类型