了解PHP中的数据类型
作者选择 Open Sourcing Mental Illness Ltd 作为 Write for DOnations 计划的一部分接受捐赠。
介绍
在 PHP 中,与所有编程语言一样,数据类型用于对一种特定类型的数据进行分类。 这很重要,因为您使用的特定数据类型将决定您可以为其分配哪些值以及您可以对其执行哪些操作(包括您可以对其执行哪些操作)。
在本教程中,我们将介绍 PHP 原生的重要数据类型。 这不是对数据类型的详尽调查,但会帮助您熟悉 PHP 中可用的选项。
考虑数据类型的一种方法是考虑我们在现实世界中使用的不同类型的数据。 两种不同的类型是数字和单词。 这两种数据类型以不同的方式工作。 我们将添加 3 + 4
得到 7
,同时我们将组合单词 star
和 fish
得到 starfish
。
如果我们开始相互评估不同的数据类型,例如数字和单词,事情就变得不那么有意义了。 例如,下面的等式没有明显的答案:
'sky' + 8
对于计算机,每种数据类型都可以被认为是完全不同的,就像单词和数字一样,所以我们必须小心我们如何使用它们来分配值以及我们如何通过操作来操作它们。
使用数据类型
PHP 是一种 松散类型 语言。 这意味着,默认情况下,如果一个值与预期的数据类型不匹配,PHP 将尽可能尝试更改错误数据类型的值以匹配预期的类型。 这称为 类型杂耍。 例如,一个需要 string
但接收到 integer
且值为 2
的函数会将传入的值更改为预期的 string
类型"2"
的值。
可以并鼓励在每个文件的基础上启用 严格模式 。 这提供了您控制的代码中数据类型的强制执行,同时允许使用可能不符合严格数据类型的附加代码包。 严格类型在文件顶部声明:
<?php declare(strict_types=1); ...
在严格模式下,只接受与类型声明完全对应的值; 否则会抛出 TypeError
。 此规则的唯一例外是 int
值将传递 float
类型声明。
数字
您在 PHP 中输入的任何数字都将被解释为数字。 您无需声明您输入的数据类型。 PHP 会将任何不带小数的数字视为 integer(例如 138),将任何以小数写入的数字视为 float(例如 138.0)。
整数
与数学一样,计算机编程中的整数是整数,可以是正数、负数或 0(...、-1、0、1、...)。 整数也可以称为 int
。 与其他编程语言一样,您不应在四位或更多位的数字中使用逗号,因此要在程序中表示数字 1,000,请将其写为 1000
。
我们可以像这样打印出一个整数:
echo -25;
这将输出:
Output-25
我们还可以声明一个 变量,在这种情况下,它是我们正在使用或操作的数字的符号,如下所示:
$my_int = -25; echo $my_int;
这将输出:
Output-25
我们也可以在 PHP 中用整数做数学运算:
$int_ans = 116 - 68; echo $int_ans;
这将输出:
Output48
整数可以在 PHP 程序中以多种方式使用,并且随着您继续学习有关该语言的更多信息,您将有很多机会使用整数并更多地了解这种数据类型。
浮点数字
浮点数 或 float 是实数,这意味着它可以是有理数或无理数。 因此,浮点数可以是可以包含小数部分的数字,例如 9.0
或 -116.42
。 考虑到 PHP 程序中的 float
,它是一个包含小数点的数字。
就像我们对整数所做的那样,我们可以像这样打印出一个浮点数:
echo 17.3;
这将输出:
Output17.3
我们还可以声明一个代表浮点数的变量,如下所示:
$my_flt = 17.3; echo $my_flt;
这将输出:
Output17.3
而且,就像整数一样,我们也可以在 PHP 中使用浮点数进行数学运算:
$flt_ans = 564.0 + 365.24; echo $flt_ans;
这将输出:
Output929.24
对于整数和浮点数,请务必记住 3
不等于 3.0
,因为 3
指的是整数,而 3.0
指浮子。 这可能会也可能不会改变程序的运行方式。
在处理计算、计算物品或金钱以及时间流逝时,数字很有用。
字符串
string 是一个或多个字符的序列,可能由字母、数字或符号组成。 此序列用单引号 或双引号
""
括起来:
echo 'This is a 47 character string in single quotes.' echo "This is a 47 character string in double quotes."
两条线都以相同的方式输出它们的值:
OutputThis is a 47 character string in single quotes. This is a 47 character string in double quotes.
您可以选择使用单引号或双引号,但无论您决定使用哪个,都应该在程序中保持一致。
节目“你好,世界!” 演示如何在计算机编程中使用字符串,作为组成短语 Hello, World! 的字符! 是一个字符串:
echo "Hello, World!";
与其他数据类型一样,我们可以将字符串存储在变量中并输出结果:
$hw = "Hello, World!" echo $hw;
无论哪种方式,输出都是相同的:
OutputHello, World!
像数字一样,我们可以在程序中对字符串执行许多操作,以操纵它们以实现我们正在寻求的结果。 字符串对于向用户传达信息以及用户将信息传达回程序很重要。
布尔值
Boolean 或 bool
数据类型可以是 true
或 false
两个值之一。 布尔值用于表示与数学逻辑分支相关的真值。
声明布尔值时不要使用引号; 引号中的任何内容都假定为字符串。 PHP 在声明布尔值时不关心大小写; True
、TRUE
、true
和 tRuE
的计算结果都相同。 如果您遵循 PHP-FIG 提供的样式指南,则值应全部为小写 true
或 false
。
数学中的许多运算给我们的答案是真或假:
- 比...更棒
- 500 > 100
True
- 1 > 5
False
- 500 > 100
- 少于
- 200 < 400
True
- 4 < 2
False
- 200 < 400
- 平等的
- 5 = 5
True
- 500 = 400
False
- 5 = 5
与任何其他数据类型一样,我们可以将布尔值存储在变量中。 与数字或字符串不同,echo
不能用于输出值,因为布尔 true
值被转换为字符串 "1"
,而布尔 false
是转换为 ""
(一个空字符串)。 这允许“类型杂耍”在布尔值和字符串值之间来回转换变量。 要输出布尔值,我们有几个选项。 要输出类型和变量的值,我们使用 var_dump
。 要输出变量值的字符串表示,我们使用 var_export
:
$my_bool = 4 > 3; echo $my_bool; var_dump($my_bool); var_export($my_bool);
由于 4 大于 3,我们将收到以下输出:
Output1 bool(true) true
echo
行将 true
布尔值转换为 1
字符串。 var_dump
输出变量类型 bool
以及 true
的值。 var_export
输出值的字符串表示形式,即 true
。
随着您使用 PHP 编写更多程序,您将更加熟悉布尔值的工作方式以及对 True
或 False
求值的不同函数和操作如何改变程序的进程。
空值
NULL 类型是没有值的。 它为变量保留空间。 这允许 PHP 知道一个变量,但仍然认为它未设置。 NULL 类型的唯一可能值是不区分大小写的 null
值。 当 PHP 试图访问一个尚未声明的变量时,它会抛出一个警告:
echo $name;
它警告变量未设置,但代码继续处理:
OutputPHP Warning: Undefined variable $name
防止此警告的一种常见方法是使用 isset
函数检查该变量是否已设置:
if (isset($name)) { echo $name; }
这会完全跳过回声,并且不会引发任何警告。 防止此类错误的第二种方法是为变量设置占位符值,例如空字符串:
$name = ''; echo "Hello ".$name;
现在将显示 Hello
没有名称,因为 $name
的值是一个空字符串:
OutputHello
这两种解决方案都是有效且有用的。 但是,将 $name
的值设置为空字符串时,实际上设置了该值:
$name = ''; if (isset($name)) { echo "Hello ".$name; }
这也将显示 Hello
没有名称,因为 $name
的值设置为空字符串:
OutputHello
与大多数挑战一样,有多种解决方案。 一种解决方案是将变量设置为 null
值。 这为该变量保留空间并防止 PHP 抛出错误,但仍认为变量“未设置”:
$name = null; echo $name; if (isset($name)) { echo "Hello ".$name; }
该变量已被“声明”,因此当 echo
尝试访问该变量时不会出错。 它也不会显示任何内容,因为没有价值。 该条件也将评估为假,因为 $name
变量未被视为已设置。
我们可以使用 var_dump
来查看 PHP 如何评估 NULL 变量:
$name = null; var_dump($name);
这向我们表明类型为 NULL:
OutputNULL
虽然不如其他变量类型常见,但 NULL 通常用作执行操作但没有返回值的函数的返回类型。
数组
PHP 中的数组实际上是一个有序映射。 map 是一种将值关联或“映射”到键的数据类型。 这种数据类型有许多不同的用途; 它可以被视为 array
、list
、hash table
、dictionary
、collection
等等。 此外,由于 PHP 中的数组值也可以是其他数组,因此可以使用多维数组。
索引数组
在最简单的形式中,数组将具有数字索引或 key
。 如果您不指定键,PHP 会自动为您生成下一个数字键。 默认情况下,数组键是 0-indexed,这意味着第一个键是 0,而不是 1。 数组内部的每个元素或值也可以称为 item。
可以通过以下两种方式之一定义数组。 第一种是使用 array()
语言结构,它使用逗号分隔的项目列表。 整数数组的定义如下:
array(-3, -2, -1, 0, 1, 2, 3)
定义数组的第二种也是更常见的方法是通过使用方括号 []
的短数组语法。 一个浮点数组将被定义如下:
[3.14, 9.23, 111.11, 312.12, 1.05]
我们还可以定义一个字符串数组,并将一个数组分配给一个变量,如下所示:
$sea_creatures = ['shark', 'cuttlefish', 'squid', 'mantis shrimp'];
同样,我们不能使用 echo
来输出整个数组,但我们可以使用 var_export
或 var_dump
:
var_export($sea_creatures); var_dump($sea_creatures);
输出显示数组使用数值 keys
:
Outputarray ( 0 => 'shark', 1 => 'cuttlefish', 2 => 'squid', 3 => 'mantis shrimp', ) array(4) { [0]=> string(5) "shark" [1]=> string(10) "cuttlefish" [2]=> string(5) "squid" [3]=> string(13) "mantis shrimp" }
因为数组是 0 索引的,所以 var_dump
显示了一个索引数组,其中数字键介于 0
和 3
之间。 每个数字 key
对应一个字符串 value
。 第一个元素的键为 0
,值为 shark
。 var_dump
函数为我们提供了关于数组的更多细节:数组中有 4 项,第一项的值是一个长度为 5 的字符串。
设置值时可以指定索引数组的数字键。 但是,在使用命名键时更常指定键。
关联数组
关联数组是具有命名键的数组。 它们通常用于保存相关数据,例如 ID 中包含的信息。 关联数组如下所示:
['name' => 'Sammy', 'animal' => 'shark', 'color' => 'blue', 'location' => 'ocean']
请注意用于分隔字符串的双箭头运算符 =>
。 =>
左边的字是键。 键可以是整数或字符串。 前一个数组中的键是:'name'
、'animal'
、'color'
、'location'
。
=>
右边的字是数值。 值可以由任何数据类型组成,包括另一个数组。 前一个数组中的值为:'Sammy'
、'shark'
、'blue'
、'ocean'
。
像索引数组一样,让我们将关联数组存储在一个变量中,并输出详细信息:
$sammy = ['name' => 'Sammy', 'animal' => 'shark', 'color' => 'blue', 'location' => 'ocean']; var_dump($sammy);
结果将把这个数组描述为有 4 个元素。 给出了每个键的字符串,但只有值指定了类型 string
和字符数:
Outputarray(4) { ["name"]=> string(5) "Sammy" ["animal"]=> string(5) "shark" ["color"]=> string(4) "blue" ["location"]=> string(5) "ocean" }
关联数组允许我们更精确地访问单个元素。 如果我们想隔离 Sammy 的颜色,我们可以通过在数组变量后面添加包含键名的方括号来实现:
echo $sammy['color'];
结果输出:
Outputblue
由于数组提供用于存储数据的键值映射,因此它们可能是 PHP 程序中的重要元素。
常数
虽然常量实际上不是一个单独的数据类型,但它的工作方式与其他数据类型不同。 顾名思义,常量是声明一次的变量,之后它们在整个应用程序中都不会改变。 常量的名称应始终为大写且不以美元符号开头。 可以使用 define
函数或 const
关键字来声明常量:
define('MIN_VALUE', 1); const MAX_VALUE = 10;
define
函数有两个参数:第一个是包含常量名称的 string
,第二个是要赋值的值。 这可以是前面解释的任何数据类型值。 const
关键字允许以与其他数据类型相同的方式为常量赋值,使用单个等号。 常量可以在您的应用程序中以与其他变量相同的方式使用,但它们不会在双引号字符串中解释:
echo "The value must be between MIN_VALUE and MAX_VALUE"; echo "The value must be between ".MIN_VALUE." and ".MAX_VALUE;
因为常量没有被解释,所以这些行的输出是不同的:
OutputThe value must be between MIN_VALUE and MAX_VALUE The value must be between 1 and 10
结论
至此,您应该对可在 PHP 中使用的一些主要数据类型有了更好的了解。 当您使用 PHP 语言开发编程项目时,这些数据类型中的每一种都将变得很重要。