类型
一般
值的含义由其类型决定。PHP 的类型分为标量类型和复合类型。标量类型包括布尔、整数、浮点数、字符串和空。复合类型包括数组和对象。 资源是一种不透明类型,其内部结构未指定,取决于实现。
标量类型是值类型。也就是说,标量类型的变量的行为就好像它包含了自己的值一样。
复合类型可以包含其他变量,除了变量本身,例如数组包含其元素,对象包含其属性。
对象和资源是句柄类型。该类型包含指向值的句柄中的信息。值类型和句柄类型之间的区别在理解语义方面变得明显,例如赋值,以及向函数传递参数和从函数返回的值。
变量没有声明为具有特定类型。相反,变量的类型在运行时由它包含的值决定。同一个变量可以在不同的时间包含不同类型的的值。
用于查询和使用类型信息的实用库函数包括gettype
、is_type
、settype
和var_dump
。
标量类型
一般
整数和浮点数类型统称为算术类型。库函数is_numeric
指示给定值是否为数字或数值字符串。
库函数is_scalar
指示给定值是否具有标量类型。但是,该函数不认为NULL
是标量。要测试NULL
,请使用is_null
。
某些对象可能支持算术和其他标量运算,或可转换为标量类型(目前仅对内部类可用)。这种对象类型以及标量类型称为标量兼容类型。请注意,同一个对象类型可能对一个运算兼容,但对另一个运算不兼容。
布尔类型
布尔类型为bool
,boolean
是其同义词。此类型可以存储两个不同的值,分别对应于布尔值true
和false
。此类型的内部表示及其值未指定。
库函数is_bool
指示给定值是否具有bool
类型。
整数类型
只有一个整数类型,int
,integer
是其同义词。此类型是二进制的,带符号的,并且使用二进制补码表示负值。可以存储的值范围是实现定义的;但是,必须支持范围[-2147483648, 2147483647]。此范围必须是有限的。
对整数值的某些操作会产生一个不能用整数表示的数学结果。例如:
- 递增最大值或递减最小值。
- 对最小值应用一元减法。
- 将两个值相乘、相加或相减。
在这种情况下,计算将像值类型为float
一样完成,结果具有该类型。
常量PHP_INT_SIZE
、PHP_INT_MIN
和PHP_INT_MAX
定义了关于int
类型的一些特征。
库函数is_int
指示给定值是否具有int
类型。
浮点数类型
只有一个浮点数类型,float
,double
和real
是其同义词。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
。
复合类型
数组类型
数组是一种数据结构,它包含一个零个或多个元素的集合,这些元素的值通过类型为int
或string
的键访问。有关更多详细信息,请参见数组章节。
库函数is_array
指示给定值是否为数组。
对象
对象是类的实例。每个不同的类声明定义一个新的类类型,每个类类型都是一个对象类型。对象类型的表示未指定。
库函数is_object
指示给定值是否为对象,库函数get_class
指示对象的类的名称。
资源
资源是对某种外部实体的描述符。例如,文件、数据库和网络套接字。
资源是一种抽象实体,其表示未指定。资源只能由实现创建或使用;它们永远不会由 PHP 代码创建或使用。
每个不同的资源都具有某种未指定形式的唯一标识。
库函数is_resource
指示给定值是否为资源,库函数get_resource_type
指示资源的类型。