1.3 - 第一章:PHP基础 - 数据类型

PHP支持多种不同的数据类型,但通常被划分为两种:标量型与符合型。

一个标量值在同一时间只包含一个值。PHP支持以下标量型数据:

boolean 只能出现true或者false
int 整型数值
float 浮点型数值
string 字符串

 

1.3.1 数值型数据

PHP承认两种数值型数据,整形 和 浮点型。整形数据只能存放整形数值(意味着可以是正负整数)。数字可以被定义为多种进制:

十进制 10; –11; 1452 标准十进制。注意不需要千位逗号分割
八进制 0666; 0100 八进制——识别八进制注意起始位0开头和用来表示Unix风格的文件与文件夹权限
十六进制 0x123; 0XFF; -0x100 十六进制;注意开头使用0x,忽略大小写

 

译者注:十进制与八进制的表达非常类似容易混淆,稍不仔细就会出现预料之外的结果。

浮点数(有的时候被称为双精度)是带有小数点的数值,赋值方式类似整形,同时也支持不同表达方式:

十进制 0.12; 1234.43; -.123 传统的十进制表示
科学计数法 2E7, 1.2e2 科学计数法——由一个不可忽略的数值(通常称为尾数),跟随一个不区分大小写的”e”和一个指数。结果就表示位数乘以10的指数次方

 

这里有些在处理数值时要注意的地方。第一,PHP运行的平台(这里只软硬件)决定运算的精度和范围。举例来说64-bit的系统就会比32-bit的系统运算精度和范围更高。糟糕的是你开发的时候没有意识到之间的差异,看似无害可靠的程序可能引起灾难性的后果。

必须明白的是浮点型数据的结果经常会出乎意料,思考下面例子:

 

echo (int) ((0.1 + 0.7) * 10);

你希望这个表达式得到的结果是8(事实上如果你不把结果转换为整形的话结果是正确的)。但结果输出的是7。发生这种情况的原因就是在内存中这个表达式的结果是7.999999无限趋向于8;但是如果使用数据强制转换成整形,那么小数位都会被省略。(12.5%精度丢失)

从这个教训中我们得知:了解数值数据的局限性并计划好如何使用他们。当你需要精确计算数值的时候请考虑使用BCMath扩展来替代PHP内置的数据类型。

1.3.2 字符型

在很多程序员的意识里,字符型数据等同于文本。很多语言也包括PHP,这种解释非常片面,在某种情况下甚至是错误的。字符串数据实际上是被排列搜集的二进制数据——可以成为文章内容,也可以是图片文件数据,一个电子表格文件,甚至是一首歌。

PHP提供了一个庞大的数组来存放这些字符数据。后面会有一整个章节来介绍这个题名为“字符”的章节。

1.3.3 布尔型

一个布尔值只能是:true或者false。通常来说,布尔值被用在逻辑判断中,后续章节会详细讨论。

当我们将其他数据类型与布尔类型相互转换时需要注意一些特殊的规则:

  • 一个数值型(无论是整形或者浮点型)转换称布尔的时候只要数值不是0,返回的都是true,是0则返回false。
  • 一个字符串转换成布尔的时候只要不是空或者内容是0,返回true,空内容或者内容中只有0则返回false。
  • 当布尔型转换成数字或者字符型时,true将被转换成1,而false将被转换成0。

1.3.4 复合类型

之前我们研究了标量数据, PHP支持两种复合型数据——因为可以存放其他数据类型,故名为符合数据类型:

  • 数组有序的数据节点;一个数据可以被用来存放和检索任何类型数据,包括数值型、布尔型、字符串型、对象甚至其他数组。更详细的会在数组章节中讲到
  • 对象包含数据和代码。他们是组成面向对象开发的基础,更详细的也会在面向对象开发章节中进行详细讨论。

1.3.5 其他数据类型

除了上面讲到的类型,PHP在特定情况下会用到以下特殊情况:

  • NULL表示一个变量没有值。那么当一个变量的被认为是NULL时,可能是被赋予NULL或者压根没有赋过值——如果直接使用此种变量PHP会警告你使用了一个没有赋值的变量。
  • 资源类型数据被用来指示外部资源(而非PHP内部原生),而存在一些有意义的特殊操作,比如外部文件操作或者操作一张图片数据。

1.3.6 数据类型转换

正如我们提到的,PHP在数据类型的转换中请考虑精度丢失。因为数据可以被数据强制转换操作转换成其它类型数据。转换操作也非常简单,在需要转换的数据之前永远括号把目标数据类型扩起来,赋值给一个变量:

 

$x = 10.88; echo (int) $x; // 输出结果 10

提示不是什么类型的数据都可以相互转换,比如任何值想要转换成资源型变量那么结果只有杯具——同时你却可以把一个资源型数据转换成数值型或者字符型,至少PHP会给出资源性数据的ID以供转换成字符型或者数值型。

 

修订:

2010年04年06日 —— Siemen

1. 小节1.3.1中的第一个表格样式调整

2. 小节1.3.3/1.3.4/1.3.5中的末尾多了一个li标签删除

3. 所有代码部分使用csdn重新插入

你可能感兴趣的:(1.3 - 第一章:PHP基础 - 数据类型)