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.7E38~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()函数销毁的变量

 

posted @ 2021-05-02 06:13  yyfgrd  阅读(285)  评论(0)    收藏  举报