Php 简明教程

PHP – Data Types

“数据类型”一词是指将数据分类到不同类别中。PHP 共有八种数据类型,我们使用这些数据类型构造变量−

  1. Integers − 无小数点的整数,例如 4195。

  2. Doubles − 浮点数,例如 3.14159 或 49.1。

  3. Booleans - 只有两种可能的值,即真或假。

  4. NULL - 仅有一个值 NULL 的特殊类型。

  5. Strings - 字符序列,例如“PHP 支持字符串操作”。

  6. Arrays - 其他值的命名和索引集合。

  7. Objects - 程序员定义的类的实例,既可以封装其他类型的值,也可以封装特定于该类的函数。

  8. Resources - 保存对 PHP 外部资源(例如数据库连接)的引用的特殊变量。

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

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

Integer Data Type in PHP

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

  1. int 是集合 Z = {…​, -2, -1, 0, 1, 2, …​} 中的数字。

  2. int 可以用十进制(基数 10)、十六进制(基数 16)、八进制(基数 8)或二进制(基数 2)记法表示。

要使用八进制记法,数字应加上前缀“0o”或“0O”。要使用十六进制记法,数字应加上前缀“0x”。要使用二进制记法,数字应加上前缀“0b”。

下面给出一些 examples -

  1. Decimal Integer - 201、4195、-15

  2. Octal Integer - 0010、0O12、-0O21

  3. Hexadecimal Integer - 0x10、-0x100

  4. Binary Integer - 0b10101、-0b100

可以将整数分配给变量,也可以在表达式中使用它们,如下所示 -

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

Double Data Type in PHP

双变量表示浮点数(也称为“浮点数”、“双精度数”或“实数”),即带分数部分的数字。分数部分跟在整数部分后面,中间用小数符号 (.) 分隔。

Note − 双精度变量可以为正、负或零。

$var1 = 1.55
$var2 =-123.0

Scientific Float Notation

PHP还允许使用科学计数法表示小数点后具有更多位数的浮点数。符号“E”或“e”用于分隔整数部分和小数部分。

− 1.2e3, 2.33e-4, 7E-10, 1.0E5

默认情况下,双精度打印时使用所需的小数位数。查看以下 example

<?php
   $many = 2.2888800;
   $many_2 = 2.2111200;
   $few = $many + $many_2;

   print("$many + $many_2 = $few");
?>

它生成下列内容 output

2.28888 + 2.21112 = 4.5

Boolean Data Type in PHP

bool 类型只有两个值;它可以为真或假。 bool 类型用于表示真值。

$bool1 = true;
$bool2 = false;

你也可以使用整数值“1”和“0”来表示真和假布尔值 −

$bool3 = 1;
$bool4 = 0;

通常,返回布尔值的运算符的结果将传递给诸如 if, whiledo-while 之类的控制结构。例如,

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

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

Interpreting Other Data Types as Booleans

这里有一组规则,你可以使用它来将其他数据类型解释为布尔值 −

  1. 如果该值是一个数字,则只有当该值等于零时它才为假,否则该值为真。

  2. 如果该值是一个字符串,则当该字符串为空(没有字符)或该字符串为“0”时它为假,否则为真。

  3. NULL类型的变量总为假。

  4. 如果该值是一个数组,则当它不包含其他值时它为假;否则为真。对于一个对象,包含一个值意味着有一个已经赋值的成员变量。

  5. 有效的资源为真(虽然一些在成功时返回资源的函数在不成功时将返回FALSE)。

Note − 不要将双精度用于布尔值。

当在布尔上下文中使用这些变量中的每一个时,这些变量中每一个都有其名称中嵌入的真值。

$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 = "";

String Data Type in PHP

字符串是一系列字符,例如’PHP支持字符串操作'。

在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_39 = "This string has thirty-nine characters";
$string_0 = "";		// a string with zero characters

单引号字符串几乎按原样对待,而双引号字符串用其值替换变量,并特别解释某些字符序列。

<?php
   $variable = "name";
   $literally = 'My $variable will not print!';

   print($literally);
   print "\n";

   $literally = "My $variable will print!";
   print($literally);
?>

当您运行此代码时,它将生成以下 output

My $variable will not print!
My name will print

字符串长度没有限制。在可用内存范围内,您可以创建任意长的字符串。

由双引号分隔的字符串(如“this”)将在 PHP 中通过以下两种方式进行预处理:

  1. 以反斜杠 (\) 开头的某些字符序列将替换为特殊字符。

  2. 变量名(以 $ 开头)将替换为其值的字符串表示形式。

转义序列替换如下:

  1. \n 被换行符替换

  2. \r 被回车符替换

  3. \t 被制表符替换

  4. \$ 被美元符号本身 ($) 替换

  5. \" 被单个双引号 (") 替换

  6. \\ 被单个反斜杠 (\) 替换

PHP 也有字符串数据类型的 HeredocNowdoc 表示法。

Heredoc Representation of String Data Type

您可以使用 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 Representation of String Data Type

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!

Null Data Type in PHP

在 PHP 中,null 表示一个特殊类型,它只有一个值:NULL。未定义和 unset() 变量将变为值“null”。

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

若要给变量赋值为 NULL,只需像这样赋值:

$my_var = NULL;

根据惯例,特殊常量 NULL 为大写,但实际上它就是 case insensitive; 你也可以直接输入 −

$my_var = null;

已分配了 NULL 的变量具有以下属性 −

  1. 在布尔语境中,它被评估为 FALSE。

  2. 使用 IsSet() 函数测试时,它会返回 FALSE。

Note − PHP 中变量的数据类型在运行时根据赋值给它们的 值来确定。

Array Data Type in PHP

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

请看以下 associative arrays 示例 −

Using the array() Function

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

Using the Short Notation

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

PHP 中的数组也可以使用“键 - 值对”语法定义。它被称为 indexed array

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

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

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

Object Data Type in PHP

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

要创建一个新对象,请使用 new statement 实例化一个类 −

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

Resource Data Type in PHP

资源是保存对 PHP 外部资源(如文件流或数据库连接)的引用的特殊变量。

以下是一个 file resource 示例 −

$fp = fopen("foo.txt", "w");

属于以上任何类型的的数据都存储在一个变量中。但是,由于 PHP 是一种动态类型语言,因此无需指定变量的类型,因为这将在运行时确定。

Example: The gettype() Function

gettype() 函数有助于找出存储在变量中的数据类型 −

<?php
   $x = 10;
   echo gettype($x) . "\n";

   $y = 10.55;
   echo gettype($y) . "\n";

   $z = [1,2,3,4,5];
   echo gettype($z);
?>

当您运行此代码时,它将生成以下 output

integer
double
array