本节介绍 PHP 的其他数据类型。包括数组、对象、Resource 以及 NULL,也涵盖了不同数据类型之间的转换等知识点。
Array 数组
数组实际上是一个有序映射。映射是一种把 values 关联到 keys 的类型。由于数组元素的值也可以是另一个数组,树形结构和多维数组也是允许的。
语法
定义数组可以用 array() 或 [] 来新建一个数组。它接受任意数量用逗号分隔的键(key) => 值(value)对。key 可以是 integer(索引数组)或者 string(关联数组),value 可以是任意类型,如对象、数组。
在目录 /home/project 创建 test.php,并编辑内容
执行
从结果中可以看到
- 如果没有键名,则数组默认使用从 0 开始的数字键名
- 打印数组不存在的 key 的值时,直接返回 NULL
- 数组可以多维嵌套,通过键名可以获取特定值
获取数组的长度-count()函数
- count()函数的作用是:返回数组的长度(元素数);
排序数组
PHP提供了几个函数来对数组进行排序。我们将介绍不同的功能,并包括示例。
- sort()函数的作用是:按字母/数字的升序(如A、B、C、D、E…5, 4, 3, 2, 1…)
- rsort()函数的作用是:按字母/数字降序(如Z、Y、X、W、V…5, 4, 3, 2, 1…)
- asort()函数的作用是:按字母/数字的升序对关联数组进行排序(如A、B、C、D、E…5, 4, 3, 2, 1…)
- ksort()函数的作用是:按关键字按字母/数字的升序对关联数组进行排序…(如A、B、C、D、E…5, 4, 3, 2, 1…)
- arsort()函数的作用是:根据数组的值,按字母/数字降序对数组进行排序(如Z、Y、X、W、V…5, 4, 3, 2, 1…)
- krsort()函数的作用是:按关键字的字母/数字降序对关联数组进行排序(如Z、Y、X、W、V…5, 4, 3, 2, 1…)
Object 对象
使用 new 可以创建一个新的对象
转换为对象
如果将一个对象转换成对象,它将不会有任何变化。如果其它任何类型的值被转换成对象,将会创建一个内置类 stdClass 的实例。如果该值为 NULL,则新的实例为空。 array 转换成 object 将使键名成为属性名并具有相对应的值,除了数字键,不迭代就无法被访问。
在目录 /home/project 创建 a.php,并编辑内容
执行 php a.php
从结果中可以看出
- a 是对象,转换为对象后不发生变化,所以a是对象,转换为对象后不发生变化,所以a 等于 $b
- 字符串 “A” 转换为对象时,自动生成 scalar 属性
- 数组 [‘hello’=>‘world’] 转换为对象时,键名 hello 作为属性,键值 world 为属性值
Resource 资源
资源 resource 是一种特殊变量,保存了外部资源的一个引用,如打开文件、数据库连接等,资源是通过专门的函数来建立和使用的
转换为资源
由于资源类型变量保存有为打开文件、数据库连接、图形画布区域等的特殊句柄,因此将其它类型的值转换为资源没有意义。
释放资源
引用计数系统是 Zend 引擎的一部分,可以自动检测到一个资源不再被引用了(和 Java 一样)。这种情况下此资源使用的所有外部资源都会被垃圾回收系统释放。因此,很少需要手工释放内存。
NULL
特殊的 NULL 值表示一个变量没有值。NULL 类型唯一可能的值就是 NULL。 在下列情况下一个变量被认为是 NULL:
- 被赋值为 NULL
- 尚未被赋值
- 被 unset()
语法
NULL 类型只有一个值,就是不区分大小写的常量 NULL。
转换到 NULL
使用 (unset) 将一个变量转换为 null 将不会删除该变量或 unset 其值。仅是返回 NULL 值而已
类型转换
PHP 是弱语言类型,定义变量的时候不需要制定变量类型,根据上下文自动解成对于的变量类型。
编辑 /home/project/test.php
命令行执行 php test.php
从结果中可以看出,PHP 隐式转换的优先级为:浮点型 > 整型 > 字符串
类型强制转换
在要转换的变量之前加上用括号括起来的目标类型,如
允许的强制转换有:
- (int), (integer) - 转换为整形 integer
- (bool), (boolean) - 转换为布尔类型 boolean
- (float), (double), (real) - 转换为浮点型 float
- (string) - 转换为字符串 string
- (array) - 转换为数组 array
- (object) - 转换为对象 object
- (unset) - 转换为 NULL (PHP 5)