PHP – 数据类型



术语“数据类型”指的是将数据分类到不同的类别。PHP 总共有八种数据类型,我们用它们来构建变量:

  • 整数 - 没有小数点的整数,例如 4195。

  • 双精度浮点数 - 浮点数,例如 3.14159 或 49.1。

  • 布尔值 - 只有两个可能的值,要么为真,要么为假。

  • NULL - 仅有一个值:NULL 的特殊类型。

  • 字符串 - 字符序列,例如 'PHP 支持字符串操作。'

  • 数组 - 其他值的命名和索引集合。

  • 对象 - 程序员定义的类的实例,可以打包其他类型的值以及特定于类的函数。

  • 资源 - 保留对 PHP 外部资源(如数据库连接)的引用的特殊变量。

前五个是简单类型,接下来的两个(数组和对象)是复合类型。复合类型可以打包任意类型的值,而简单类型则不能。

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

PHP 中的整数数据类型

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

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

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

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

以下是一些 示例

  • 十进制整数 - 201、4195、-15

  • 八进制整数 - 0010、0O12、-0O21

  • 十六进制整数 - 0x10、-0x100

  • 二进制整数 - 0b10101、-0b100

整数可以分配给变量,也可以用于表达式,例如:

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

PHP 中的双精度浮点数数据类型

双精度浮点数变量表示浮点数(也称为“浮点数”、“双精度浮点数”或“实数”),它们是带有小数部分的数字。小数部分位于整数部分之后,由小数点符号 (.) 分隔。

注意 - 双精度浮点数变量可以是正数、负数或零。

$var1 = 1.55
$var2 =-123.0

科学浮点数表示法

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

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

默认情况下,双精度浮点数以所需的最小小数位数打印。请查看以下 示例

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

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

它产生以下 输出

2.28888 + 2.21112 = 4.5

PHP 中的布尔值数据类型

bool 类型只有两个值;它可以是真或假。bool 类型用于表达真值。

$bool1 = true;
$bool2 = false;

您还可以使用整数“1”和“0”来表示真和假布尔值:

$bool3 = 1; 
$bool4 = 0;

通常,返回 bool 值的运算符的结果将传递给控制结构,例如 if、whiledo-while。例如,

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

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

将其他数据类型解释为布尔值

以下是一组规则,您可以使用它们将其他数据类型解释为布尔值:

  • 如果值是数字,则仅当该值等于零时才为假,否则该值为真。

  • 如果值是字符串,则当字符串为空(字符数为零)或为字符串“0”时为假,否则为真。

  • NULL 类型的值为假。

  • 如果值是数组,则当它不包含其他值时为假;否则为真。对于对象,包含值意味着具有已分配值的成员变量。

  • 有效的资源为真(尽管某些在成功时返回资源的函数在不成功时将返回 FALSE)。

注意 - 不要使用双精度浮点数作为布尔值。

以下每个变量在用作布尔值上下文中时,其名称中都包含真值。

$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 中的字符串数据类型

字符串是一系列字符,例如“PHP 支持字符串操作”。

在 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_39 = "This string has thirty-nine characters";
$string_0 = "";		// a string with zero characters

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

<?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 字符串数据类型的表示形式。

字符串数据类型的 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>

字符串数据类型的 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() 函数测试时,它返回 FALSE。

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

PHP 中的数组数据类型

PHP 中的数组是有序映射,一个键与一个或多个值相关联。PHP 数组使用 array() 函数定义,或者使用简写形式,其中数据放在方括号中。

请查看以下关联数组示例:

使用 array() 函数

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

使用简写形式

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

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

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

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

注意:在 PHP 中,复合数据类型用于存储数据集合,包括数组和对象。

PHP 中的对象数据类型

对象类型是程序员定义的类的实例,它可以打包其他类型的值以及特定于该类的函数。

要创建新对象,请使用new 语句实例化一个类:

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

PHP 中的资源数据类型

资源是特殊的变量,它们保存对 PHP 外部资源的引用(例如文件流或数据库连接)。

这是一个文件资源的示例:

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

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

示例:gettype() 函数

gettype() 函数有助于找出存储在变量中的数据类型:

<?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
广告