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, whiledo-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 还具有 HeredocNowdoc 表示 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