PHP – 数据类型



术语 “数据类型” 是指将数据分为不同类别的分类。PHP 共有八种数据类型,我们用来构造变量 -

  • Integers − 没有小数点的整数,如 4195。
  • Doubles − 浮点数,如 3.14159 或 49.1。
  • Booleans − 只有两个可能的值,true 或 false。
  • NULL − 只有一个值的特殊类型:NULL。
  • Strings − 字符序列,例如 'PHP支持字符串操作'。
  • Arrays - 其他值的命名和索引集合。
  • Objects - 程序员定义的类的实例,它可以打包特定于类的其他类型的值和函数。
  • Resources − 保存对 PHP 外部资源(如数据库连接)的引用的特殊变量。

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

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

PHP 中的 Integer 数据类型

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

  • int 是集合 Z = {..., -2, -1, 0, 1, 2, ...} 中的数字。
  • int 可以用十进制 (base 10)、十六进制 (base 16)、八进制 (base 8) 或二进制 (base 2) 表示法。

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

下面给出了一些示例——

  • 十进制整数 − 201, 4195, -15
  • 八进制整数 − 0010, 0O12, -0O21
  • 十六进制整数 − 0x10, -0x100
  • 二进制整数 − 0b10101, -0b100

整数可以分配给变量,也可以用于表达式,如下所示 -


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

PHP 中的 Double 数据类型

双精度变量表示浮点数(也称为“浮点数”、“双精度数”或“实数”),它们是具有小数分量的数字。小数分量跟在由十进制符号 (.) 分隔的整数分量之后。

− 双精度变量可以是正数、负数或零。


$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 类型只有两个值;它可以是 True 或 False。bool 类型用于表示真值。


$bool1 = true;
$bool2 = false;

您还可以使用整数值 “1” 和 “0” 来表示 True 和 False 布尔值 -


$bool3 = 1;	
$bool4 = 0;

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


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

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

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

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

  • 如果值是一个数字,则仅当值等于零时,它才为 False,否则值为 True。
  • 如果值是字符串,则如果字符串为空(字符为零)或字符串 “0”,则为 False,否则为 True。
  • NULL 类型的值始终为 False。
  • 如果值是数组,则如果它不包含其他值,则为 False;否则为 True。对于对象,包含值意味着具有已分配值的成员变量。
  • 有效资源为 true(尽管某些在成功时返回资源的函数将在不成功时返回 FALSE)。

注意 − 不要将 double 用作布尔值。

以下每个变量在布尔上下文中使用时,其名称中都嵌入了 truth 值。


$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支持字符串操作'。

在 PHP 中,字符等同于字节。这意味着 PHP 仅支持 256 个字符集,因此不提供本机 Unicode 支持。

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


$string_1 = "这是一个双引号字符串";
$string_2 = '这是一个稍长的单引号字符串';

以下是字符串类型的更多示例 -


$string_39 = "这个字符串有三十九个字符";
$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

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

PHP 以以下两种方式对由双引号分隔的字符串(如 “this”)进行预处理 -

  • 某些以反斜杠 (\) 开头的字符序列将替换为特殊字符。
  • 变量名称(以 $ 开头)将替换为其值的字符串表示形式。

转义序列替换是 −

  • \n 替换为换行符
  • \r 替换为回车字符
  • \t 替换为制表符
  • \$ 替换为美元符号本身 ($)
  • \" 替换为单个双引号 (”)
  • \\ 替换为单个反斜杠 (\)

PHP 还具有字符串数据类型的 Heredoc Nowdoc 表示形式。

字符串数据类型的 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 使用与 heredocs 相同的 <<< 序列标识,但标识符用单引号括起来,例如 <<<'EOT'。nowdocs 适用于单引号字符串,就像 heredocs 适用于双引号字符串一样。

请看下面的例子 -


<?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。undefined 和 unset() 变量将解析为值 “null”。

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

要给变量 NULL 值,只需像这样分配它 -


 $my_var = NULL;

特殊常量 NULL 按照惯例大写,但实际上它不区分大小写;您也可以键入 -


 $my_var = null;

已分配为 NULL 的变量具有以下属性 -

  • 它在布尔上下文中计算结果为 FALSE。
  • 使用 IsSet() 函数进行测试时,它返回 FALSE。

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

PHP 的 array 数据类型

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

看看下面的关联数组示例 -

使用 array() 函数


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

使用短表示法


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

PHP 中的数组也可以使用 “key-value pair” 语法定义。它称为索引数组。


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

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

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

PHP 中的对象数据类型

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

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


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

PHP 中的资源数据类型

Resources 是特殊的变量,用于保存对 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