PHP 支持8种基本的数据类型。
四种标量类型:
- boolean (布尔型)
- integer (整型)
- float (符点型, 也称作 double)
- string (字符串)
两种复合类型:
- array (数组)
- object (对象)
最后是两种特殊类型:
- resource (资源)
- NULL (NULL)
使用var_dump()可显示数据类型;
可强制转换数据类型;如 $num = '45'; echo 1 + (int)$num;而实际上PHP是弱类型语言,对于此例可不用强制转换,可以自动进行类型转换。
布尔型:
boolean:取两个值,true/false,不区分大小写。
当转换为 boolean 时,以下值被认为是 FALSE:
- the 布尔值 FALSE 自身
- the 整型值 0 (零)
- the 浮点型值 0.0 (零)
- 空字符串, 以及 字符串 "0"
- 不包括任何元素的数组
- 不包括任何成员变量的对象(仅PHP 4.0 适用)
- 特殊类型 NULL (包括尚未设定的变量)
- 从没有任何标记(tags)的XML文档生成的SimpleXML 对象
所有其它值都被认为是 TRUE(包括任何资源)。
整型:
整型值可以使用十进制,十六进制或八进制表示,前面可以加上可选的符号(- 或者 +)。八进制表示数字前必须加上 0(零),十六进制表示数字前必须加上 0x。
windows平台下,为有符号的32位,其中符号占据一位,最大值为 2^31 - 1(2147483647),可以用常量PHP_INT_MAX 表示;若溢出将被自动转换为浮点型;
如果向八进制数传递了一个非法数字(即 8 或 9),则后面其余数字会被忽略。
<?php
var_dump(011090); // int 72
浮点型:
PHP不区分float与double;而且会有某些精度的丢失;
Strings:
字符串有四种声明方式:
- 单引号:'','My test';
- 双引号:"","PHP字符串";
- heredoc:
<<< EOF HP不区分float与double;而且会有某些精度的丢失少的呢个就 EOF
其中,EOF,是一个标记符,可以自定义,但习惯应避开关键字,标记符大小写敏感;而且 第一个 EOF 也可以加上双引号;第二个标记必须出现在新的行首。
heredoc可以识别变量以及单、双引号中的转义符,但不对双引号转义;$name = 'Tim'; $tester = <<<EOAW $name saied:"It's my book!\n" "test" 'It's my book!\n' over EOAW; echo $tester; 输出为:Tim saied:"It's my book! " "test" 'It's my book! ' over
- nowdoc:将heredoc的标记加为单引号或将双引号标记替换为单引号即为nowdoc风格;nowdoc能够实现真正的所见即所得;
$name = 'Tim'; $tester = <<<'EOAW' $name saied:"It's my book!\n" "test" 'It's my book!\n' over EOAW; echo $tester; 输出为: $name saied:"It's my book!\n" "test" 'It's my book!\n' over
字符串是一种特殊的数组;
数组:
PHP 中的 数组 实际上是一个有序映射。映射是一种把 values 关联到 keys 的类型。此类型在很多方面做了优化,因此可以把它当成真正的数组,或列表(向量),散列表(是映射的一种实现),字典,集合,栈,队列以及更多可能性。数组元素的值也可以是另一个数组。树形结构和多维数组也是允许的。
可以使用array()来定义数组:
$arr = '新疆特产'; $fruits = array('0' => 'apple', 1 => 'orange', 2 => 'pear', true=> '葡萄', false=> '橙子', 4.5 => '西瓜', NULL => '不知道', -6 => '杏', $arr => '哈密瓜', ); print_r($fruits); 输出: Array ( [0] => 橙子 [1] => 葡萄 [2] => pear [4] => 西瓜 [] => 不知道 [-6] => 杏 [新疆特产] => 哈密瓜 )
// 键(key) 可是是一个 整数(integer) 或 字符串(string),key中的浮点型将被取整为integer;
//使用 TRUE 作为键名将使 integer 1 成为键名。使用 FALSE 作为键名将使 integer 0 成为键名。使用 NULL 作为键名将等同于使用空字符串。使用空字符串作为键名将新建(或覆盖)一个用空字符串作为键名的值,这和用空的方括号不一样。
// 值(value) 可以是任意类型的值
不能用数组和对象作为键(key)。这样做会导致一个警告:Illegal offset type。
1 //定义数组 2 $arr = array('新疆特产'); 3 $fruits = array('0' => 'apple', 4 1 => 'orange', 5 2 => 'pear', 6 true=> '葡萄', 7 false=> '橙子', 8 4.5 => '西瓜', 9 NULL => '不知道', 10 -6 => '杏', 11 $arr => '哈密瓜', 12 ); 13 print_r($fruits); 14 输出: 15 ( ! ) Warning: Illegal offset type in ……index.php on line 74 16 Call Stack 17 # Time Memory Function Location 18 1 0.0006 347864 {main}( ) ..\index.php:0 19 Array ( [0] => 橙子 [1] => 葡萄 [2] => pear [4] => 西瓜 [] => 不知道 [-6] => 杏 )
对象:
资源类型:
资源是一种特殊变量,保存了到外部资源的一个引用。资源是通过专门的函数来建立和使用的。
is_resource() 函数测定一个变量是否是资源,函数 get_resource_type() 则返回该资源的类型。
NULL:
特殊的 NULL 值表示一个变量没有值。NULL 类型唯一可能的值就是 NULL。
在下列情况下一个变量被认为是 NULL:
-
被赋值为 NULL。
-
尚未被赋值。
-
被 unset()。
类型强制转换
在要转换的变量之前加上用括号括起来的目标类型。
允许的强制转换有:
- (int), (integer) - 转换为 整型(integer)
- (bool), (boolean) - 转换为 布尔型(boolean)
- (float), (double), (real) - 转换为 浮点型(float)
- (string) - 转换为 字符串(string)
- (binary) - 转换为二进制 字符串(string) (PHP 6)
- (array) - 转换为 数组(array)
- (object) - 转换为 对象(object)
- (unset) - 转换为 NULL (PHP 5)
(binary) 转换会在结果前面加上前缀'b',PHP 5.2.1 新增。