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:函数

强制类型转换

一、字符串转换为数值

  1. 当一个字符串被当作数字来求值时,根据以下规则来决定结果的类型和值。
  2. 如果包括“.”,“e”或“E”其中任何一个字符的话,字符串被当作 float 来求值。否则就被当作整数。
  3. 该值由字符串最前面的部分决定。如果字符串以合法的数字数据开始,就用该数字作为其值,否则其值为 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 的成员变量将包含该值



 ​