原文: https://zetcode.com/lang/php/datatypes/

在 PHP 教程的这一部分中,我们将讨论数据类型。

计算机程序可以处理数据。 用于各种数据类型的工具是现代计算机语言的基本组成部分。 data type是一组值以及对这些值的允许操作。

PHP 数据类型列表

PHP 具有八种数据类型:

标量类型

  • bool
  • int
  • float
  • string

复合类型

  • array
  • object

特殊类型

  • resources
  • null

与 Java,C 或 Visual Basic 等语言不同,PHP 中没有提供变量的显式类型定义。 变量的类型在运行时由 PHP 确定。 如果我们将字符串分配给变量,它将变成字符串变量。 稍后,如果我们分配一个整数值,该变量将成为一个整数变量。

PHP 布尔值

我们的世界建立了双重性。 有天与地,水与火,阴与阳,男人与女人,爱与恨。 在 PHP 中,布尔数据类型是具有以下两个值之一的原始数据类型:TrueFalse。 这是基本的数据类型。

快乐的父母正在等待孩子的出生。 他们为两种可能性都选择了名称。 如果要成为男孩,他们选择了约翰。 如果要成为女孩,他们会选择维多利亚。

kid.php

  1. <?php
  2. $male = False;
  3. $r = rand(0, 1);
  4. $male = $r ? True: False;
  5. if ($male) {
  6. echo "We will use name John\n";
  7. } else {
  8. echo "We will use name Victoria\n";
  9. }

该脚本使用随机整数生成器来模拟我们的情况。

  1. $r = rand(0, 1);

rand()函数从给定的整数边界返回一个随机数。 在我们的情况下为 0 或 1。

  1. $male = $r ? True: False;

我们使用三元运算符设置$male变量。 该变量基于随机$r值。 如果$r等于 1,则$male变量设置为True。 如果$r等于 0,则$male变量设置为False

  1. if ($male) {
  2. echo "We will use name John\n";
  3. } else {
  4. echo "We will use name Victoria\n";
  5. }

我们打印名称。 if命令适用于布尔值。 如果变量$maleTrue,则将"We will use name John"打印到控制台。 如果其值为False,我们将打印另一个字符串。

  1. $ php kid.php
  2. We will use name Victoria
  3. $ php kid.php
  4. We will use name John
  5. $ php kid.php
  6. We will use name Victoria
  7. $ php kid.php
  8. We will use name Victoria

该脚本运行了几次。

以下脚本显示了一些视为TrueFalse的常见值。 例如,空字符串,空数组,0 被认为是False

boolean.php

  1. <?php
  2. class Object {};
  3. var_dump((bool) "");
  4. var_dump((bool) 0);
  5. var_dump((bool) -1);
  6. var_dump((bool) "PHP");
  7. var_dump((bool) array(32));
  8. var_dump((bool) array());
  9. var_dump((bool) "false");
  10. var_dump((bool) new Object());
  11. var_dump((bool) NULL);

在此脚本中,我们在布尔上下文中检查一些值。 var_dump()函数显示有关变量的信息。 (bool)构建体称为转换。 在它的临时上下文中,0 值是一个数字。 在布尔上下文中,它为False。 布尔上下文是当我们使用(布尔)强制转换,何时使用某些运算符(否定,比较运算符)以及何时使用if/elsewhile关键字时。

  1. $ php boolean.php
  2. bool(false)
  3. bool(false)
  4. bool(true)
  5. bool(true)
  6. bool(true)
  7. bool(false)
  8. bool(true)
  9. bool(true)
  10. bool(false)

这是脚本的结果。

PHP 整数

整数是实数的子集。 它们写时没有小数或小数部分。 整数落在集合Z = {...,-2,-1,0,1,2,...}中。 整数是无限的。

在许多计算机语言中,整数是原始数据类型。 实际上,计算机只能使用整数值的子集,因为计算机的容量有限。 整数用于计算离散实体。 我们可以有 3、4、6 个人,但不能有 3.33 个人。 我们可以有 3.33 公斤。

在 PHP 中,可以使用四种不同的表示法指定整数:十进制,十六进制,八进制和二进制。 八进制值以0开头,十六进制以0x开头,二进制以0b开头。

notation.php

  1. <?php
  2. $decimal_var = 31;
  3. $octal_var = 031;
  4. $hexadecimal_var = 0x31;
  5. $binary_var = 0b01001110;
  6. echo "$decimal_var\n";
  7. echo "$octal_var\n";
  8. echo "$hexadecimal_var\n";
  9. echo "$binary_var\n";

我们定义了四个变量; 它们每个都有不同的整数符号。

  1. $ php notation.php
  2. 31
  3. 25
  4. 49
  5. 78

默认符号是十进制。 脚本以十进制打印这四个数字。

PHP 中的整数具有固定的最大大小。 整数的大小取决于平台。 PHP 具有内置常量,可显示整数的最大大小。

  1. $ uname -mo
  2. x86_64 GNU/Linux
  3. $ php -a
  4. Interactive mode enabled
  5. php> echo PHP_INT_SIZE;
  6. 8
  7. php> echo PHP_INT_MAX;
  8. 9223372036854775807

在我的 64 位 Ubuntu Linux 系统上,整数值为 8 个字节。 最大值是 9223372036854775807。

在 Java 和 C 中,如果整数值大于允许的最大值,则发生整数溢出。 PHP 的工作方式不同。 在 PHP 中,整数变为浮点数。 浮点数具有更大的边界。

boundary.php

  1. <?php
  2. $var = PHP_INT_MAX;
  3. echo var_dump($var);
  4. $var++;
  5. echo var_dump($var);

我们为$var变量分配一个最大整数值。 我们将变量增加一。 var_dump()函数转储有关给定变量的信息。

  1. $ php boundary.php
  2. int(9223372036854775807)
  3. float(9.2233720368548E+18)

如前所述,在内部,数字成为浮点值。

在 Java 中,增加后的值为-2147483648。 这是整数溢出一词的来历。 该数字超过顶部并成为可分配给变量的最小负整数值。

如果我们使用整数,那么我们将处理离散实体。 例如,我们将使用整数来计算苹果。

apples.php

  1. <?php
  2. # number of baskets
  3. $baskets = 16;
  4. # number of apples in each basket
  5. $apples_in_basket = 24;
  6. # total number of apples
  7. $total = $baskets * $apples_in_basket;
  8. echo "There are total of $total apples \n";

在脚本中,我们计算了苹果的总量。 我们使用乘法运算。

  1. $ php apples.php
  2. There are total of 384 apples

脚本的输出。

PHP 浮点数

浮点数表示计算中的实数。 实数测量连续的数量,例如重量,高度或速度。 PHP 中的浮点数可以大于整数,并且可以具有小数点。 浮标的大小取决于平台。

我们可以使用各种语法来创建浮点值。

floats.php

  1. <?php
  2. $a = 1.245;
  3. $b = 1.2e3;
  4. $c = 2E-10;
  5. $d = 1264275425335735;
  6. var_dump($a);
  7. var_dump($b);
  8. var_dump($c);
  9. var_dump($d);

在此示例中,我们有两种表示法的情况,科学家使用它们来表示浮点值。 另外$d变量被分配了一个大数字,因此它会自动转换为浮点型。

  1. $ php floats.php
  2. float(1.245)
  3. float(1200)
  4. float(2.0E-10)
  5. int(1264275425335735)

这是上述脚本的示例输出。

根据文档,不应对浮点数进行相等性测试。 我们将举例说明为什么。

  1. $ php -a
  2. Interactive mode enabled
  3. php> echo 1/3;
  4. 0.33333333333333
  5. php> $var = (0.33333333333333 == 1/3);
  6. php> var_dump($var);
  7. bool(false)

在此示例中,我们比较了两个看起来相同的值,但是它们产生了意外的结果。

假设一个短跑运动员跑了 100m,跑了 9.87s。 他的公里/小时速度是多少?

sprinter.php

  1. <?php
  2. # 100m is 0.1 km
  3. $distance = 0.1;
  4. # 9.87s is 9.87/60*60 h
  5. $time = 9.87 / 3600;
  6. $speed = $distance / $time;
  7. echo "The average speed of a sprinter is $speed \n";

在此示例中,必须使用浮点值。

  1. $speed = $distance / $time;

为了获得速度,我们将距离除以时间。

  1. $ php sprinter.php
  2. The average speed of a sprinter is 36.474164133739

这是sprinter脚本的输出。 36.474164133739 是浮点数。

通常需要舍入浮点数。

rounding.php

  1. <?php
  2. $a = 1.4567;
  3. echo round($a, 2) . "\n";
  4. echo round($a, 3) . "\n";
  5. echo sprintf("%0.3f", $a) . "\n" ;

In this example, it is necessary to use floating point values.

  1. echo round($a, 2) . "\n";
  2. echo round($a, 3) . "\n";

使用round()函数,将浮点值四舍五入到两个和三个位置。

  1. echo sprintf("%0.3f", $a) . "\n" ;

或者,我们也可以使用sprintf()函数,该函数根据指定的格式化字符串对字符串进行格式化。

  1. $ php rounding.php
  2. 1.46
  3. 1.457
  4. 1.457

这是rounding.php脚本的输出。

PHP 字符串

字符串是一种数据类型,表示计算机程序中的文本数据。

由于字符串在每种编程语言中都非常重要,因此我们将为它们专门整整一章。 在这里,我们仅举一个小例子。

strings.php

  1. <?php
  2. $a = "PHP ";
  3. $b = 'Perl';
  4. echo $a, $b;
  5. echo "\n";

我们可以使用单引号和双引号来创建字符串字面值。

  1. $ php strings.php
  2. PHP Perl

该脚本将两个字符串输出到控制台。 \n是一个特殊的序列,换行。 此字符的效果就像在键入文本时按Enter键一样。

PHP 数组

数组是处理元素集合的复杂数据类型。 每个元素都可以通过索引访问。 在 PHP 中,数组更为复杂。 数组可以视为数组,列表或字典。 换句话说,数组在其他语言中都是我们所谓的数组,列表,字典。

由于集合在所有计算机语言中都非常重要,因此我们将两章专门介绍集合-数组。 这里我们仅显示一个小例子。

arrays.php

  1. <?php
  2. $names = [ "Jane", "Lucy", "Timea", "Beky", "Lenka" ];
  3. print_r($names);

使用速记符号创建一个数组,在此使用方括号。 数组的元素用逗号分隔。 元素是字符串。 print_r()函数将有关变量的人类可读信息打印到控制台。

  1. $ php arrays.php
  2. Array
  3. (
  4. [0] => Jane
  5. [1] => Lucy
  6. [2] => Timea
  7. [3] => Beky
  8. [4] => Lenka
  9. )

这是脚本的输出。 这些数字是指数,我们可以通过它们访问数组元素。

PHP 对象

到目前为止,我们一直在讨论内置数据类型。 对象是用户定义的数据类型。 程序员可以创建适合其域的数据类型。 在有关面向对象的程序设计(OOP)的一章中,有关对象的更多信息。

PHP 资源

资源是特殊的数据类型。 他们拥有对外部资源的引用。 它们是由特殊功能创建的。 资源是打开文件,数据库连接或图像画布区域的处理器。

PHP NULL

还有另一种特殊的数据类型-NULL。 基本上,数据类型表示不存在,未知或为空。

在 PHP 中,在三种情况下,变量为NULL

  • 它没有分配值
  • 它被分配了一个特殊的NULL常量
  • 它是用unset()函数取消设置的

nulltype.php

  1. <?php
  2. $a;
  3. $b = NULL;
  4. $c = 1;
  5. unset($c);
  6. $d = 2;
  7. if (is_null($a)) echo "\$a is null\n";
  8. if (is_null($b)) echo "\$b is null\n";
  9. if (is_null($c)) echo "\$c is null\n";
  10. if (is_null($d)) echo "\$d is null\n";

在我们的示例中,我们有四个变量。 其中三个被认为是NULL。 我们使用is_null()函数来确定变量是否为NULL

  1. $ php nulltype.php
  2. $a is null
  3. $b is null
  4. $c is null

这是脚本的结果。

PHP 类型转换

我们经常一次处理多种数据类型。 将一种数据类型转换为另一种数据类型是编程中的常见工作。 类型转换或类型转换是指将一种数据类型的实体更改为另一种。 有两种转换类型:隐式转换和显式转换。 隐式类型转换,也称为强制转换,是编译器自动进行的类型转换。

  1. php> echo "45" + 12;
  2. 57
  3. php> echo 12 + 12.4;
  4. 24.4

在上面的示例中,我们有两个隐式类型转换的示例。 在第一个语句中,字符串将转换为整数并添加到第二个操作数。 如果两个操作数中的任何一个都是浮点数,则两个操作数都将被求值为浮点数,结果将是一个浮点数。

当我们使用诸如(boolean)之类的强制转换构造时,会发生显式转换。

  1. php> $a = 12.43;
  2. php> var_dump($a);
  3. float(12.43)
  4. php> $a = (integer) $a;
  5. php> var_dump($a);
  6. int(12)
  7. php> $a = (string) $a;
  8. php> var_dump($a);
  9. string(2) "12"
  10. php> $a = (boolean) $a;
  11. php> var_dump($a);
  12. bool(true)

此代码段显示了实际的强制转换。 首先,我们将浮点值分配给变量。 稍后我们将其转换为整数,字符串,最后转换为布尔数据类型。

在 PHP 教程的这一部分中,我们介绍了 PHP 数据类型。