PHP的数据类型
PHP的数据类型
四种标量类型:1、整型 2、浮点型(小数) 3、字符串 4、布尔型
两种复合类型:1、数组 2、对象
两种特殊类型:1、null 2、资源
PHP不支持无符号整数
PHP_INT_SIZE整型长度(4个字节)
PHP_INT_MAX最大值
一、字符串 string
1.1、单引号
通常执行速度也是最快的,因为PHP不会解析这种字符串(不解析其中是否存在变量) 只能转义单引号和转义字符本身;
1.2、双引号
最适用于:
- 转义字符串
- 内含多个变量和纯文本的字符串
- 压缩多行拼接,提高可读性
1.3、heredoc 语法结构
标识符的命名:只能包含字母、数字和下划线,并且不能用数字和下划线作为开头;结束定界符必须独立一行存在。前后不能有其他字符(包括空白符)
1.4、nowdoc 语法结构
名称加单引号。相当于定界符中的单引号。不会解析变量。
$str = <<<EOD
定义字符串的方法是用heredoc句法结构
EOD;
echo $str;
/*
$变量名 = <<<定界符号
结束定界符;
*/
数据类型之间相互转换
1、类型自动转换
- 布尔型 true =》 1;false=》0
- null转整型0
- 字符串转数字
- 递增/递减运算符不影响布尔值。递减
NULL
值也没有效果,但是递增NULL
的结果是 1。
2、强制类型转换
2.1、在要转换的变量之前加上用括号括起来的目标类型
- (int), (integer) - 转换为 整型(integer)
- (bool), (boolean) - 转换为 布尔型(boolean)
- (float), (double), (real) - 转换为 浮点型(float)
- (string) - 转换为 字符串(string)
- (binary) - 转换为二进制 字符串(string) (PHP 6)
- (array) - 转换为 数组(array)
- (object) - 转换为 对象(object)
- (unset) - 转换为 NULL (PHP 5)
2.2、使用3个具体类型的转换函数
- intval(变量,进制)
int intval ( mixed $var [, int $base = 10 ] )
- floatval(变量)
float floatval ( mixed $var )
- strval()
string strval ( mixed $var )
$a1 = 10.4;
$a2 = -12.5;
$a3 = 44.1238503;
print intval($a1); // returns 10
print intval($a2); // returns -12
print intval($a3); // returns 44
2.3、使用通用类型转换函数settype
bool settype(mixed var,string type) //设置变量的类型
$foo = "5bar"; // string
$bar = true; // boolean
settype($foo, "integer"); // $foo 现在是 5 (integer)
settype($bar, "string"); // $bar 现在是 "1" (string)
3、检测变量类型函数
- is_int():检查变量是否是整数
- is_float():检查变量是否是浮点
- is_string():检查变量是否是字符串
- is_bool():检查变量是否是布尔
- is_array():检查变量是否是数组
- is_object():检查变量是否是一个对象
- is_resource():检查变量是否是一个资源
- is_null():检查变量是否为Null
- is_scalar():判该变量是否是标量
- is_numeric():判断是否是数字或数字字符串
- is_callback()判断是否是有效的函数名
伪类型
伪类型(pseudo-types)是PHP文档里用于标识参数可以使用的类型和值。仅用于PHP手册及我们代码中注释部分。
- mixed:混合类型,可接受多种不同的类型
- number:参数可以是int或float
- callback:函数
强制类型转换
一、字符串转换为数值
- 当一个字符串被当作数字来求值时,根据以下规则来决定结果的类型和值。
- 如果包括“.”,“e”或“E”其中任何一个字符的话,字符串被当作 float 来求值。否则就被当作整数。
- 该值由字符串最前面的部分决定。如果字符串以合法的数字数据开始,就用该数字作为其值,否则其值为 0(零)。合法数字数据由可选的正负号开始,后面跟着一个或多个数字(可选地包括十进制分数),后面跟着可选的指数。指数是一个“e”或者“E”后面跟着一个或多个数字。
二、强制转换为布尔值 (bool)|(boolean)
要明示地将一个值转换成 boolean,用 (bool) 或者 (boolean) 来强制转换。
当转换为 boolean 时,以下值被认为是 FALSE:
布尔值 FALSE
整型值 0(零)
浮点型值 0.0(零)
空白字符串和字符串 "0"
没有成员变量的数组
没有单元的对象(仅适用于 PHP 4)
特殊类型 NULL(包括尚未设定的变量)
所有其它值都被认为是 TRUE(包括任何资源)。
三、强制转换为字符串 (string) |strval()
- 布尔值 TRUE 将被转换为字符串 "1",而值 FALSE 将被表示为 ""(即空字符串)。这样就可以随意地在布尔值和字符串之间进行比较。
- 整数或浮点数数值在转换成字符串时,字符串由表示这些数值的数字字符组成(浮点数还包含有指数部分)。
- 数组将被转换成字符串 "Array",因此无法通过 echo() 或者 print() 函数来输出数组的内容。
- 对象将被转换成字符串 "Object"。自 PHP 5 起,如果合适可以用 __toString() 方法。
- 资源类型总是以 "Resource id #1" 的格式被转换成字符串,其中 1 是 PHP 在运行时给资源指定的唯一标识。如果希望获取资源的类型,请使用函数 get_resource_type()。
- NULL 将被转换成空字符串。
四、强制转换为数组 (array)
- 对于任何的类型:整型、浮点、字符串、布尔和资源,如果将一个值转换为数组,将得到一个仅有一个元素的数组(其下标为 0),该元素即为此标量的值。
- 如果将一个对象转换成一个数组,所得到的数组的元素为该对象的属性(成员变量),其键名为成员变量名。
- 如果将一个
NULL
值转换成数组,将得到一个空数组。
五、转换为对象 (object)
如果其它任何类型的值被转换成对象,内置类 stdClass 的一个实例将被建立。如果该值为 NULL,则新的实例为空。数组转换成对象将使键名成为属性名并具有相对应的值。对于任何其它的值,名为 scalar 的成员变量将包含该值