PHP数据类型
一. 四种标量类型
1. 布尔型(boolean)
布尔类型是最简单的类型. boolean表达了TRUE或FALSE, 即"真"或"假". 在 PHP 进行关系运算(也称比较运算)及布尔运算(也称逻辑运算)时,返回的都是布尔结 果,它是构成 PHP 逻辑控制的判断依据。
在 PHP 中,布尔型不是只有 TRUE 或 FALSE 两个值,当运算符、函数或者流程控制需要一个 boolean 参数时,任何类型的值 PHP 都会自动转换成布尔型的值。将其他类型作为 boolean 时,以下值被认为是 FALSE,所有其他值都被认为是 TRUE(包括任何资源)。
布尔值 FALSE。 整型值 0(零)为假,1 和其他非零值(不论正负)一样,被认为是 TRUE。 浮点型值 0.0(零)。 空白字符串和字符串"0"。 没有成员变量的数组。 没有单元的对象(仅适用于 PHP 4)。 特殊类型 NULL(包括尚未设定的变量)。
2. 整形(integer)
整形分为二进制(基数为2, 数字前加'0b', PHP>5.4.0)、八进制(基数为8, 数字前加'0')、十进制(基数为10)、十六进制(基数为16, 数字前加'0x').
整形数字最大使用范围, 32位操作系统为 2 147 483 647, 64位操作系统为9223372036854775807(9E18), 自PHP4.4.0和5.0.5后,最大值可以用常量PHP_INT_MAX来表示.
整形数字最小使用范围, 32位操作系统为-2 147 483 648, 64位操作系统为-9223372036854775808, 自PHP7.0.0后, 最小值可以用常量PHP_INT_MIN来表示.
PHP不支持无符号整数, 所以不能像其他语言那样讲整数都变成正数, 也就不能将最大值翻一番.
如果超出Integer的范围, 将会被解释成float. Integer的值的字长可以用常量PHP_INT_SIZE来表示.
PHP_INT_SIZE // 8 PHP_INT_MAX // 9223372036854775807 PHP_INT_MIN // -9223372036854775808
var_dump(9223372036854775808) // float(9223372036854775808)
3. 浮点型 (float)
浮点数是包含小数部分的数, 通常用来表示整数无法表示的数.
浮点数的字长也是和平台相关的, 允许表示的范围为 1.7E38~1.7E+38, 精确到小数点后 15 位.
在PHP中单精度(float)与双精度(double)类型是相同的.
浮点数只是一种近似的数值, 如果使用浮点数表示 8, 则该结果内部的表示其实类似于 7.999 999 999 9……
所以永远不要相信浮点数结果精确到了最后一位, 也永远不要比较两个浮点数是否相等.
如果确实需要更高的精度, 应该使用任意精度数学函数或者 gmp()函数.
<?php
$float = 1.234;
$float = 1.2e3;
$float = 7E-10;
4. 字符串类型 (string)
字符串类型可以只是一个字符, 也可以变得非常巨大, 有任意多个字符组成.
PHP没有给字符的大小强加实现范围, 所以完全不用担心字符串的长度(PHP7支持存储大于2GB的字符串).
字符串可以使用三种方法定义, 但他们在功能上有明显的区别, 分别是: 单引号、双引号和定界符.
1. 单引号
PHP不会解析单引号中的变量, 而是将变量名原样输出.
在单引号中可以使用转义字符(\), 但是只能转义在单引号中引起来的单引号(')和转义字符本身(\).
<?php
$test = 1; echo '$test \\ \' \n \r'; \\ $test \ ' \n \r
所以在定义简单字符串时, 使用单引号的效率会更高, 因为PHP不会花费一些处理字符转义和解析变量上的开销.
因此, 如果没有特别需求, 应使用单引号定义字符串
2. 双引号
PHP会解析双引号中的变量、数组值或对象属性的方法.
在双引号中也可以使用转义字符(\), 但支持更多的字符 \n \r \t \\ \$ \"等等
如果想明示指定的名字的结束, 可以用花括号把变量名括起来.
<?php
$test = '123';
echo "$test {$test}"; // 123 123
3. 定界符
定界符是以"<<<"后提供一个标识符开始, 然后是包含的字符串, 最后是同样的标识符结束字符串.
定界符文本除了不能初始化类成员(在 PHP 5.3.0 以后,也可以用来初始化静态变量和类的属性和 常量),表现得就和双引号字符串一样,只是没有双引号。
定界符中的变量也会被解析,但当在 定界符文本中表达复杂变量时和字符串一样同样也要注意.
所以能够很容易地使用定界符定义较长的字 符串,通常用于从文件或者数据库中大段地输出文档.
二. 两种复合类型
1. 数组 (array)
而数组可以存 放多个数据, 并且可以存放任何类型的数据.
PHP中的数组实际上是一张有序图. 图是一种把 values 映射到 keys 的类型, 此类型在很多方面进行了优化, 因此可以把它当成真正的数组或列表(矢量)、散列表(图的一种实现)、字典、集合、栈、队列来使用,以及更多可能性.
因为可以用另一个 PHP 数组作为值,也可以很容易地模拟树.
在 PHP中, 可以使用多种方法构造一个数组, 它接 受一定数量的用逗号分隔的 key => value参数对.
<?php $arr = array('test' => '123'); $arr = ['test' => '123'];
2. 对象 (object)
一个对象类型的变量, 是由一组属性值和一组方法构成的.
其中属性表明对象的一种状态, 方法通常用来表明对 象的功能.
<?php
class Test {
var $name;
}
$t = new Test;
三. 两种特殊类型
1. 资源类型 (resource)
资源是通过专门的函数来建立和使用 的, 使用资源类型变量包含:打开的文件、数据库连接、图形画布区域等的特殊句柄,并由程序员创建、使用和释放.
任何资源在不需要时都应该被及时释放, 如果程序员忘记了释放资源, 系统将自动启用垃圾回收机制, 以避免内存的消耗殆尽.
因此, 很少需要使用某些 free-result 函数来手工释放内存.
<?php
$dir_handle = opendir("E:\\php");
var_dump($dir_handle); // resource(4) of type (stream)
2. NULL 类型
特殊的 NULL 值表示一个变量没有值, NULL 类型唯一可能的值就是 NULL.
NULL 不表示空格, 也不表示零, 也不是空字符串, 而是表示一个变量的值为空.
NULL 不区分大小写, 在下列情况下一个 变量被认为是 NULL:
将变量直接赋值为 NULL
声明的变量尚未被赋值
被 unset()函数销毁的变量

浙公网安备 33010602011771号