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");
?>
它生成以下输出 -
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 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;
?>
当您运行此代码时,它将生成以下输出 -
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;
?>
运行代码并检查其输出 -
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);
?>
当您运行此代码时,它将生成以下输出 -
double
array