当前位置:  首页>> 技术小册>> PHP8入门与项目实战(2)

从PHP 4开始,PHP中的变量不需要事先声明,赋值即可声明。在使用这些数据类型前,读者需要了解它们的含义和特性。下面介绍整型、浮点型、布尔型、字符串型、数组型、对象型以及NULL和Resource两个比较特殊的类型。

3.5.1 什么是数据类型
不同的数据类型其实就是所存储数据的不同种类。PHP的不同数据类型主要包括:
·整型(integer):用来存储整数。

·浮点型(float):用来存储实数。

·字符串型(string):用来存储字符串。

·布尔型(boolean):用来存储真(true)或假(false)。

·数组型(array):用来存储一组数据。

·对象型(object):用来存储一个类的实例。

作为弱类型语言,PHP也被称为动态类型语言。在强类型语言(例如C语言)中,一个变量只能存储一种类型的数据,并且这个变量在使用前必须声明变量类型。而在PHP中,给变量赋什么类型的值,这个变量就是什么类型,例如以下几个变量:

  1. $hello = "hello world";

由于hello world是字符串,因此变量$hello的数据类型就是字符串类型。

  1. $hello = 100;

同样,由于100为整型,因此$hello也就是整型。

  1. $wholeprice = 100.0;

由于100.0为浮点型,因此$wholeprice就是浮点型。

由此可见,对于变量而言,如果没有定义变量的类型,则它的类型由所赋值的类型决定。

3.5.2 整型
整型是数据类型中最为基本的类型。在现有的32位运算器下,整型的取值是从-2147483648到+2147483647。整型可以表示为二进制、八进制、十进制和十六进制。

要使用二进制表达,数字前必须加上0b;要使用八进制表达,数字前必须加上0;要使用十六进制表达,数字前必须加上0x。

例如:

  1. <?php
  2. $a = 1234; // 十进制数
  3. $a = -123; // 负数
  4. $a = 0123; // 八进制数 (等于十进制83)
  5. $a = 0x1A; // 十六进制数 (等于十进制26)
  6. $a = 0b11111111; // 二进制数字 (等于十进制255)
  7. ?>

在PHP 8中,整型值的字长可以用常量PHP_INT_SIZE来表示,最大值可以用常量PHP_INT_MAX来表示,最小值可以用常量PHP_INT_MIN表示。整型数的字长和平台有关,32位平台下的最大值是2147483647,64位平台下的最大值通常大约是9223372036854775807。

3.5.3 浮点型
浮点型用于表示实数。在大多数运行平台下,这个数据类型的大小为8个字节。它的近似取值范围是2.2E-308~1.8E+308(科学记数法)。

例如:

  1. -1.432
  2. 1E+07
  3. 0.0

3.5.4 布尔型
布尔型只有两个值,就是true和false。布尔型是十分有用的数据类型,程序可以通过它实现逻辑判断的功能。

其他的数据类型基本都有布尔属性:

·整型:为0时,其布尔属性为false;为非零值时,其布尔属性为true。

·浮点型:为0.0时,其布尔属性为false;为非零值时,其布尔属性为true。

·字符串型:为空字符串“”或者零字符串“0”时,其布尔属性为false;包含除此以外的字符串时,其布尔属性为true。

·数组型:若不含任何元素,其布尔属性为false;只要包含元素,则其布尔属性为true。

·对象型和资源型:其布尔属性永远为true。

·NULL型:其布尔属性永远为false。

3.5.5 字符串型
字符串型的数据是表示在引号之间的数据。引号分为双引号“””和单引号“’”。这两种引号可以表示字符串,但是这两种表示方法也有一定的区别。

双引号几乎可以包含所有的字符,但是在其中的变量显示变量的值,而不是变量的变量名,有些特殊字符加上“\”符号就可以了;单引号内的字符是被直接表示出来的。

下面通过一个案例来讲解整型、浮点型、布尔型和字符串型数据的使用方法和技巧。

【例3.10】

  1. <?php
  2. $int1= 2021; // 十进制整数
  3. $int2= 01223; //八进制整数
  4. $int3=0x1223; //十六进制整数
  5. echo "输出整数类型的值:";
  6. echo $int1;
  7. echo "\t"; //输出一个制表符
  8. echo $int2; //输出659
  9. echo "\t";
  10. echo $int3; //输出4643
  11. echo "<br/>";
  12. $float1=54.66;
  13. echo $float1; //输出54.66
  14. echo "<br/>";
  15. echo "输出布尔型变量:";
  16. echo (Boolean)( $int1); //将int1 整型转化为布尔型变量
  17. echo "<br/>";
  18. $string1="字符串类型的变量";
  19. echo $string1;
  20. ?>

本程序运行结果如图3-10所示。

3.5.6 数组型
数组是PHP变量的集合,它按照“键”与“值”的对应关系组织数据。数组的键值既可以是整数,也可以是字符串。另外,数组在不特意表明键值的默认情况下,数组元素的键值为从零开始的整数。

在PHP中,使用list()函数或array()函数来创建数组,也可以直接进行赋值。

下面使用array()函数创建数组。

【例3.11】

本程序运行结果如图3-11所示。

【案例分析】
(1)程序中用“=>”为数组赋值,数组的下标只是存储的标识,没有任何意义,数组元素的排列以加入的先后顺序为准。

(2)本程序采用foreach()方法输出整个数组。

上面实例的语句可以简化如下。
【例3.12】

  1. <?php
  2. $arr=array(15,1E+05,"开始学习PHP基本语法了"); // 定义数组并赋值
  3. for ($i=0;$i<3;$i++)
  4. {
  5. echo $arr[$i]."<br/>";
  6. }
  7. ?>

本程序运行结果如图3-12所示。从结果可以看出,这两种写法的运行结果相同。

另外,读者还可以对数组的元素一个一个地赋值,下面举例说明。
【例3.13】

  1. <?php
  2. $arr[0]=2021; // 对数组元素分别赋值
  3. $arr[2]= 18.88;
  4. $arr[1]= "北风卷地白草折,胡天八月即飞雪。";
  5. foreach ($arr as $value) { // 使用foreach()方法输出数组内容
  6. echo $value."<br/>";
  7. }
  8. ?>

本程序运行结果如图3-13所示。

3.5.7 对象型
对象就是类的实例。当一个类被实例化以后,这个被生成的对象被传递给一个变量,这个变量就是对象型变量。对象型变量也属于资源型变量。

3.5.8 NULL型
NULL类型是仅拥有NULL这个值的类型。这个类型用来标记一个变量为空。一个空字符串与NULL是不同的。在数据库存储时会把空字符串和NULL区分开处理。NULL型在布尔判断时永远为false。很多情况下,在声明一个变量的时候可以直接先赋值为NULL型,如$value=NULL。

3.5.9 资源类型
资源(resource)类型是十分特殊的数据类型。它表示PHP的扩展资源,可以是一个打开的文件,也可以是一个数据库连接,甚至可以是其他的数据类型。但是在编程过程中,资源类型却是几乎永远接触不到的。

3.5.10 数据类型之间的相互转换
数据从一个类型转换到另一个类型,就是数据类型转换。在PHP语言中,有两种常见的转换方式:自动数据类型转换和强制数据类型转换。

1.自动数据类型转换
这种转换方式最为常用,直接输入数据的转换类型即可。

【例3.14】

  1. <?php
  2. $a = "2"; //$a是字符串
  3. echo $a;
  4. echo "<br/>";
  5. $a*=2; //$a现在是一个整数
  6. echo $a;
  7. echo "<br/>";
  8. $a*=1.4; //$a现在是一个浮点数
  9. echo $a;
  10. ?>

程序运行结果如图3-14所示。

2.强制数据类型转换
在PHP语言中,可以使用settype函数强制转换数据类型,基本语法如下:

  1. Bool settype(var,string type)

type的可能值不能包含资源类型数据。如果转型成功,就返回1,否则返回0。

【例3.15】

  1. <?php
  2. $flo1=100.86; // 定义浮点型数据
  3. echo settype($flo1,"int");// 强制转换数据为整数并输出
  4. echo "<br/>";
  5. echo $flo1;
  6. ?>

本程序运行结果如图3-15所示。这里返回结果为1,说明浮点数100.86转型为整数100已经成功了。

3.6 整型处理机制
PHP 7以前的版本里,如果向八进制数传递了一个非法数字,例如8或9,则后面其余数字会被忽略。在PHP 7及以后的版本中,将会出现编译错误。
例如下面的代码将会报错:

  1. $a = 0792; // 9是无效的八进制数字

在PHP 8中,如果位移负的位置,将会产生异常,例如:

  1. var_dump(1 >> -1);
  2. // ArithmeticError: Bit shift by negative number

在PHP 8中,左位移如果超出位数,就会返回为0,例如:

  1. var_dump(1 << 64); // int(0)

而在PHP 7之前的版本中,运行结果和CPU的架构有关系,比如x86会返回1。
在PHP 7及以后的版本中,右位移如果超出位数,就会返回0或者-1,例如:

  1. var_dump(1 >> 64); // int(0)
  2. var_dump(-1 >> 64); // int(-1)