PHP 数据类型有哪些?怎么用?

文章导读
Previous Quiz Next “数据类型”(Data Types)一词指的是在 PHP 中将数据分类到不同的类别中。数据类型定义了变量可以存储的数据类型。
📋 目录
  1. 壹 数据类型列表
  2. 贰 PHP 中的 Integer 数据类型
  3. 叁 PHP 中的 Double 数据类型
  4. 肆 科学计数法浮点表示
  5. 伍 PHP 中的 Boolean 数据类型
  6. 陆 PHP 中的 String 数据类型
  7. 柒 PHP 中的 Null 数据类型
  8. 捌 PHP 中的 Array 数据类型
  9. 玖 PHP 中的 Object 数据类型
  10. 拾 PHP 中的 Resource 数据类型
A A

PHP - 数据类型



Previous
Quiz
Next

“数据类型”(Data Types)一词指的是在 PHP 中将数据分类到不同的类别中。数据类型定义了变量可以存储的数据类型。

PHP 支持多种数据类型,如 string、integer、float 等。数据类型使在程序中存储和处理信息变得更容易。了解数据类型对于编写正确且清晰的代码非常重要。

数据类型列表

PHP 总共有八种数据类型,我们用它们来构建变量 −
  • Integers − 没有小数点的整数,如 4195。

  • Doubles − 浮点数,如 3.14159 或 49.1。

  • Booleans − 只有两个可能的值,要么是 true,要么是 false。

  • NULL − 特殊类型,只有一个值:NULL。

  • Strings − 字符序列,如 'PHP supports string operations.'。

  • Arrays − 其他值的命名和索引集合。

  • Objects − 程序员定义的 class 的实例,可以打包其他类型的值以及特定于该 class 的 function。

  • Resources − 持有指向 PHP 外部资源引用的特殊变量(如数据库连接)。

前五种是简单类型,后两种(arrays 和 objects)是复合类型。复合类型可以打包其他任意类型的值,而简单类型则不能。

在本章中,我们将详细讨论这些 PHP 内置数据类型。

PHP 中的 Integer 数据类型

没有小数点的整数(如 4195)在 PHP 中属于 int 类型。Integer 数据类型是最简单的类型。它们对应于简单的整数,包括正数和负数。

  • int 是集合 Z = {..., -2, -1, 0, 1, 2, ...} 中的数字。

  • int 可以用十进制(基数 10)、十六进制(基数 16)、八进制(基数 8)或二进制(基数 2)表示。

要使用八进制表示法,在数字前加“0o”或“0O”。要使用十六进制表示法,在数字前加“0x”。要使用二进制表示法,在数字前加“0b”。

以下是一些 示例 −

  • Decimal Integer − 201, 4195, -15

  • Octal Integer − 0o10, 0o12, -0o21

  • Hexadecimal Integer − 0x10, -0x100

  • Binary Integer − 0b10101, -0b100

Integers 可以赋值给变量,或者在表达式中使用,如下所示 −

$int_var = 12345;
$another_int = -12345 + 12345;

PHP 中的 Double 数据类型

Double 变量表示浮点数(也称为“floats”、“doubles”或“real numbers”),即带有小数部分的数字。小数部分跟在整数部分之后,由小数符号(.)分隔。

注意 − Double 变量可以是正数、负数或零。

$var1 = 1.55;
$var2 =-123.0;

科学计数法浮点表示

PHP 还允许使用科学计数法来表示小数点后有更多位数的浮点数。符号“E”或“e”用于分隔整数部分和小数部分。

- 1.2e3, 2.33e-4, 7E-10, 1.0E5 

默认情况下,doubles 会以所需的最小小数位数打印。请看以下 示例 −

<?php
   $many = 2.2888800;
   $many_2 = 2.2111200;
   $few = $many + $many_2;

   print("$many + $many_2 = $few");
?>

它产生以下 输出 −

2.28888 + 2.21112 = 4.5

PHP 中的 Boolean 数据类型

bool 类型只有两个值;它可以是 True 或 False。bool 类型用于表示真值。

$bool1 = true;
$bool2 = false;

你也可以使用整数值 "1" 和 "0" 来表示 True 和 False 的 Boolean 值 −

$bool3 = 1; 
$bool4 = 0;

通常,返回 bool 值的运算符结果会被传递给控制结构,如 if, while 或 do-while。例如,

if (TRUE)
   print("This will always print.");

else
   print("This will never print.");

将其他数据类型解释为 Boolean

以下是一组规则,你可以用它将其他数据类型解释为 Boolean −

  • 如果值为数字,则仅当值为零时为 False,否则为 True。

  • 如果值为字符串,则当字符串为空(零个字符)或为字符串 "0" 时为 False,否则为 True。

  • 类型为 NULL 的值始终为 False。

  • 如果值为数组,则当它不包含其他值时为 False;否则为 True。对于对象,包含值意味着有一个已赋值的成员变量。

  • 有效的资源为 true(尽管某些在成功时返回资源的函数在失败时会返回 FALSE)。

注意 − 不要使用浮点数(doubles)作为 Boolean 值。

以下每个变量在其名称中嵌入了真值,当在 Boolean 上下文中使用时。

$true_num = 3 + 0.14159;
$true_str = "Tried and true"
$true_array[49] = "An array element";
$false_array = array();
$false_null = NULL;
$false_num = 999 - 999;
$false_str = "";

PHP 中的 String 数据类型

字符串是一系列字符的序列,例如,'PHP supports string operations.'。

在 PHP 中,一个字符等同于一个字节。这意味着 PHP 只支持 256 个字符集,因此不提供原生的 Unicode 支持。

PHP 支持单引号和双引号两种字符串表示形式。以下两种表示在 PHP 中都是有效的 −

$string_1 = "This is a string in double quotes";
$string_2 = 'This is a somewhat longer, singly quoted string';

以下是更多 string 类型示例 −

$string_39 = "This string has thirty-nine characters";
$string_0 = "";		// 一个包含零个字符的字符串

单引号字符串几乎被按字面处理,而双引号字符串会将变量替换为其值,并特别解释某些字符序列。

<?php
   $variable = "name";
   $literally = 'My $variable will not print!';

   print($literally);
   print "\n";

   $literally = "My $variable will print!";
   print($literally);
?>

运行此代码,将产生以下输出 −

My $variable will not print!
My name will print

字符串长度没有人为限制。在可用内存范围内,你应该能够创建任意长的字符串。

由双引号包围的字符串(如 "this")会被 PHP 以以下两种方式预处理 −

  • 以反斜杠(\)开头的某些字符序列会被替换为特殊字符。

  • 变量名(以 $ 开头)会被替换为其值的字符串表示。

转义序列替换如下 −

  • \n 被替换为换行符

  • \r 被替换为回车符

  • \t 被替换为制表符

  • \$ 被替换为美元符号本身 ($)

  • \" 被替换为单个双引号 (")

  • \\ 被替换为单个反斜杠 (\)

PHP 还具有 Heredoc 和 Nowdoc 表示 string 数据类型的方式。

String 数据类型的 Heredoc 表示

你可以使用 heredoc 将多行分配给单个字符串变量 −

<?php
   $channel =<<<XML

   <channel>
      <title>What's For Dinner</title>
      <link>http://menu.example.com/ </link>
      <description>Choose what to eat tonight.</description>
   </channel>
   XML;

   echo <<< END
      This uses the "here document" syntax to output multiple lines with 
	  variable interpolation. Note that the here document terminator must
	  appear on a line with just a semicolon. no extra whitespace!
   END;

   print $channel;
?>

运行此代码,将产生以下输出 −

This uses the "here document" syntax to output
multiple lines with variable interpolation. Note
that the here document terminator must appear on a
line with just a semicolon. no extra whitespace!

<channel>
   <title>What's For Dinner</title>
   <link>http://menu.example.com/ </link>
   <description>Choose what to eat tonight.</description>
</channel>

String 数据类型的 Nowdoc 表示

heredoc 标识符的所有规则也适用于 nowdoc 标识符。nowdoc 的指定方式与 heredoc 相同,但 nowdoc 内部不进行解析。你可以使用 nowdoc 构造嵌入大块文本,而无需使用任何转义字符。

nowdoc 使用与 heredoc 相同的 <<< 序列标识,但标识符用单引号包围,例如 <<<'EOT'。nowdoc 适用于单引号字符串,就像 heredoc 适用于双引号字符串一样。

查看以下示例 −

<?php
   echo <<<'IDENTIFIER'
   As the cat cleared its throat with a refined "Meow",
   the squirrel chirped excitedly about its latest
   discovery of a hidden stash of peanut treasure!
   IDENTIFIER;
?>

运行代码并查看其输出 −

As the cat cleared its throat with a refined "Meow",
the squirrel chirped excitedly about its latest
discovery of a hidden stash of peanut treasure!

PHP 中的 Null 数据类型

在 PHP 中,null 表示一种特殊类型,它只有一个值:NULL。未定义和 unset() 的变量将具有 NULL 值。

程序员通常在 PHP 中使用 Null 数据类型来初始化变量或表示值缺失。

要给变量赋予 NULL 值,只需像这样赋值即可 −

$my_var = NULL;

特殊常量 NULL 按照惯例使用大写,但实际上它是 不区分大小写 的;你也可以这样写 −

$my_var = null;

被赋值为 NULL 的变量具有以下特性 −

  • 在布尔上下文中求值为 FALSE。

  • 使用 IsSet() function 测试时返回 FALSE。

注意 − PHP 中变量的数据类型是根据赋给它们的值在运行时确定的。

PHP 中的 Array 数据类型

PHP 中的 array 是一个有序映射,一个 key 与一个或多个 value 相关联。PHP array 使用 array() function 定义,或者使用短语法将数据放入方括号中。

查看以下 关联数组 的示例 −

使用 array() Function

$arr = array(
   "foo" => "bar",
   "bar" => "foo",
);

使用短语法

$arr = [
   "foo" => "bar",
   "bar" => "foo",
];

PHP 中的 array 也可以使用“键值对”语法定义。这被称为 索引数组。

$arr = array("foo", "bar", "hello", "world");

在 多维数组 中,主数组的每个元素也可以是一个数组。子数组的每个元素也可以是一个数组,依此类推。多维数组中的值使用多个索引访问。

注意 − 在 PHP 中,复合数据类型用于存储数据集合,包括 arrays 和 objects。

PHP 中的 Object 数据类型

object 类型是程序员定义的 class 的实例,它可以封装其他类型的值以及特定于该 class 的 functions。

要创建新 object,使用 new 语句 来实例化 class −

class foo {
   function bar() {
      echo "Hello World."; 
   }
}
$obj = new foo;
$obj->bar();

PHP 中的 Resource 数据类型

Resources 是特殊的变量,持有指向 PHP 外部资源的引用(例如文件流或数据库连接)。

以下是 文件资源 的示例 −

$fp = fopen("foo.txt", "w");

属于上述任何类型的数据都存储在变量中。然而,由于 PHP 是一种动态类型语言,无需指定变量的类型,因为这将在运行时确定。

示例:gettype() Function

gettype() function 有助于找出变量中存储的数据类型 −

<?php
   $x = 10;
   echo gettype($x) . "\n";

   $y = 10.55;
   echo gettype($y) . "\n";

   $z = [1,2,3,4,5];
   echo gettype($z);
?>

运行此代码时,将产生以下 输出 −

integer
double
array