类型

一般

值的含义由其类型决定。PHP 的类型分为标量类型复合类型。标量类型包括布尔整数浮点数字符串。复合类型包括数组对象资源是一种不透明类型,其内部结构未指定,取决于实现。

标量类型是值类型。也就是说,标量类型的变量的行为就好像它包含了自己的值一样。

复合类型可以包含其他变量,除了变量本身,例如数组包含其元素,对象包含其属性。

对象和资源是句柄类型。该类型包含指向值的句柄中的信息。值类型和句柄类型之间的区别在理解语义方面变得明显,例如赋值,以及向函数传递参数和从函数返回的值。

变量没有声明为具有特定类型。相反,变量的类型在运行时由它包含的值决定。同一个变量可以在不同的时间包含不同类型的的值。

用于查询和使用类型信息的实用库函数包括gettypeis_typesettypevar_dump

标量类型

一般

整数和浮点数类型统称为算术类型。库函数is_numeric指示给定值是否为数字或数值字符串

库函数is_scalar指示给定值是否具有标量类型。但是,该函数不认为NULL是标量。要测试NULL,请使用is_null

某些对象可能支持算术和其他标量运算,或可转换为标量类型(目前仅对内部类可用)。这种对象类型以及标量类型称为标量兼容类型。请注意,同一个对象类型可能对一个运算兼容,但对另一个运算不兼容。

布尔类型

布尔类型为boolboolean是其同义词。此类型可以存储两个不同的值,分别对应于布尔值truefalse。此类型的内部表示及其值未指定。

库函数is_bool指示给定值是否具有bool类型。

整数类型

只有一个整数类型,intinteger是其同义词。此类型是二进制的,带符号的,并且使用二进制补码表示负值。可以存储的值范围是实现定义的;但是,必须支持范围[-2147483648, 2147483647]。此范围必须是有限的。

对整数值的某些操作会产生一个不能用整数表示的数学结果。例如:

  • 递增最大值或递减最小值。
  • 对最小值应用一元减法。
  • 将两个值相乘、相加或相减。

在这种情况下,计算将像值类型为float一样完成,结果具有该类型。

常量PHP_INT_SIZEPHP_INT_MINPHP_INT_MAX定义了关于int类型的一些特征。

库函数is_int指示给定值是否具有int类型。

浮点数类型

只有一个浮点数类型,floatdoublereal是其同义词。float类型必须至少支持 IEEE 754 64 位双精度表示的范围和精度。

库函数is_float指示给定值是否具有float类型。库函数is_finite指示给定的浮点数是否有限。库函数is_infinite指示给定的浮点数是否为无穷大。库函数is_nan指示给定的浮点数是否为NaN

字符串类型

字符串是一组连续的字节,表示零个或多个字符的序列。

从概念上讲,字符串可以被认为是数组的字节(元素),其键是从零开始的int值。每个元素的类型为string。但是,字符串不被视为集合,因此不能对其进行迭代。

长度为零的字符串称为空字符串

关于字符串中的字节如何转换为字符,未指定。

虽然字符串的用户可能会选择将值为\0的字节赋予特殊语义,但从 PHP 的角度来看,这种空字节没有特殊含义。PHP 不假设字符串包含任何特定数据,也不将任何字节或序列赋予特殊值。但是,许多库函数假设它们接收的字符串参数为 UTF-8 编码,通常没有明确说明这一点。

数值字符串是一个字符串,其内容完全匹配下面str-numeric产生式定义的模式。前导数值字符串是一个字符串,其初始字符满足数值字符串的要求,其尾随字符是非数值的。非数值字符串是一个不是数值字符串的字符串。

str-numeric::
   str-whitespaceopt   signopt   str-number

str-whitespace::
   str-whitespaceopt   str-whitespace-char

str-whitespace-char::
   new-line
   Space character (0x20)
   Horizontal-tab character (0x09)
   Vertical-tab character (0x0B)
   Form-feed character (0x0C)

str-number::
   digit-sequence
   floating-literal

请注意,数字序列被解释为具有十进制(因此"0377"被视为十进制 377,具有冗余的前导零,而不是八进制 377)。

只能对字符串执行一个变异操作,即偏移量赋值,这涉及简单的赋值运算符 =

库函数is_string指示给定值是否具有字符串类型。

空类型

空类型只有一个可能的值,NULL。此类型及其值的表示未指定。

库函数is_null指示给定值是否为NULL

复合类型

数组类型

数组是一种数据结构,它包含一个零个或多个元素的集合,这些元素的值通过类型为intstring的键访问。有关更多详细信息,请参见数组章节

库函数is_array指示给定值是否为数组。

对象

对象的实例。每个不同的类声明定义一个新的类类型,每个类类型都是一个对象类型。对象类型的表示未指定。

库函数is_object指示给定值是否为对象,库函数get_class指示对象的类的名称。

资源

资源是对某种外部实体的描述符。例如,文件、数据库和网络套接字。

资源是一种抽象实体,其表示未指定。资源只能由实现创建或使用;它们永远不会由 PHP 代码创建或使用。

每个不同的资源都具有某种未指定形式的唯一标识。

库函数is_resource指示给定值是否为资源,库函数get_resource_type指示资源的类型。