PHP - 数据类型
“数据类型”(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