获取数据类型 :
如果只是想得到一个易读懂的类型的表达方式用于调试,用 gettype()。
要查看某个类型,不要用 gettype(),而用is_type() 函数。
PHP的数据类型转换属于强制转换,允许转换的PHP数据类型有:
(int), (integer) - 转换为整形 integer
(bool), (boolean) - 转换为布尔类型 boolean
(float), (double), (real) - 转换为浮点型 float
(string) - 转换为字符串 string
(array) - 转换为数组 array
(object) - 转换为对象 object
(unset) - 转换为 NULL (PHP 5)
数据类型有三种转换方式:
在要转换的变量前加上用括号括起来的目标类型
使用转换函数intval(), floatval(), strval()
使用类型转换函数settype(mixed var, string type)
1 <?php
2 2 /*
3 3 * 第一种转换方式: (int) (bool) (float) (string) (array) (object)
4 4 */
5 5 $num1 = 3.2;
6 6 $num2 = (int)$num1;
7 7 var_dump($num1); //输出 float 3.2
8 8 var_dump($num2); //输出 int 3
9 9
10 10 /*
11 11 * 第二种转换方式: intval() floatval() strval()
12 12 */
13 13 $str = "34.35fd";
14 14 $int = intval($str);
15 15 $float = floatval($str);
16 16 $string = strval($str);
17 17 var_dump($int); //输出 int 34
18 18 var_dump($float); //输出 float 34.35
19 19 var_dump($string); //输出 string '34.35fd' (length=7)
20 20
21 21 /*
22 22 * 第三种转换方式: settype();
23 23 */
24 24 $num4 = 12.8;
25 25 $flag = settype($num4, "int");
26 26 var_dump($flag); //输出 boolean true
27 27 var_dump($num4); //输出 int 12
28 28
29 29 /*
30 30 * 判断数据类型使用gettype()函数
31 31 */
32 32 var_dump(gettype($num1));
33 33 var_dump(gettype($num2));
34 34 var_dump(gettype($str));
35 35 var_dump(gettype($int));
36 36 var_dump(gettype($float));
37 37 var_dump(gettype($string));
38 38 var_dump(gettype($num4));
39 39 ?>
字符串转为数值
如果该字符串没有包含 '.','e' 或 'E' 并且其数字值在整型的范围之内(由 PHP_INT_MAX 所定义),
该字符串将被当成 integer 来取值。其它所有情况下都被作为 float 来取值。
该字符串的开始部分决定了它的值。如果该字符串以合法的数值开始,则使用该数值。否则其值为 0(零)。
合法数值由可选的正负号,后面跟着一个或多个数字(可能有小数点),
再跟着可选的指数部分。指数部分由 'e' 或 'E' 后面跟着一个或多个数字构成。
1 <?php
2 $sSeparate = "";
3 echo '结果'," ",$sSeparate,'类型',"<br />";
4 $mFoo = 1 + '10.5';
5 echo $mFoo," ",$sSeparate,getType($mFoo),"<br />";
6
7 $mFoo = 1 + '10';
8 echo $mFoo," ",$sSeparate,getType($mFoo),"<br />";
9
10 $mFoo = 1 + '-1.3e3';
11 echo $mFoo," ",$sSeparate,getType($mFoo),"<br />";
12
13 $mFoo = 1 + 'hello';
14 echo $mFoo," ",$sSeparate,getType($mFoo),"<br />";
15
16 $mFoo = 1 + '99hello';
17 echo $mFoo," ",$sSeparate,getType($mFoo),"<br />";
18
19 $mFoo = 1 + '99.90hello';
20 echo $mFoo," ",$sSeparate,getType($mFoo),"<br />";
结果 类型
11.5 double
11 integer
-1299 double
1 integer
100 integer
100.9 double
转为字符串型
一个值可以通过在其前面加上 (string) 或用 strval() 函数来转变成字符串。在一个需要字符串的表达式中,
会自动转换为 string。比如在使用函数 echo 或 print 时,或在一个变量和一个 string 进行比较时,就会发生这种转换。
类型和类型转换可以更好的解释下面的事情,也可参考函数 settype()。
一个布尔值 boolean 的 TRUE 被转换成 string 的 "1"。Boolean 的 FALSE 被转换成 ""(空字符串)。这种转换可以在 boolean 和 string 之间相互进行。
一个整数 integer 或浮点数 float 被转换为数字的字面样式的 string(包括 float 中的指数部分)。使用指数计数法的浮点数(4.1E+6)也可转换。
Note:
在脚本的区域(category LC_NUMERIC)中定义了十进制小数点字符。参见 setlocale()。
数组 array 总是转换成字符串 "Array",因此,echo 和 print 无法显示出该数组的内容。要显示某个单元,可以用 echo $arr['foo'] 这种结构。要显示整个数组内容见下文。
在 PHP 4 中对象 object 总是被转换成字符串 "Object"。
资源 resource 总会被转变成 "Resource id #1" 这种结构的字符串,其中的 1 是 PHP 在运行时分配给该 resource 的唯一值。不要依赖此结构,可能会有变更。
要得到一个 resource 的类型,可以用函数 get_resource_type()。
NULL 总是被转变成空字符串。
如上面所说的,直接把 array,object 或 resource 转换成 string 不会得到除了其类型之外的任何有用信息。可以使用函数 print_r() 和 var_dump() 列出这些类型的内容。
1 <?php
2 var_dump(strval(10)); //string(2) "10"
3 var_dump(strval(FALSE)); //string(0) ""
4 var_dump(strval(true)); //string(1) "1"
5 var_dump(strval(100.09)); //string(6) "100.09"
6 var_dump(strval(NULL)); //string(0) ""
7 ?>
转为数组型
对于任意 integer,float,string,boolean 和 resource 类型,如果将一个值转换为数组,将得到一个仅有一个元素的数组,其下标为 0,该元素即为此标量的值。
换句话说,(array)$scalarValue 与 array($scalarValue) 完全一样。
如果一个 object 类型转换为 array,则结果为一个数组,其单元为该对象的属性。键名将为成员变量名,不过有几点例外:
整数属性不可访问;私有变量前会加上类名作前缀;保护变量前会加上一个 '*' 做前缀。这些前缀的前后都各有一个 NULL 字符。
NULL为空数组
1 <?php
2 print_r((array)10);
3 /*
4 Array
5 (
6 [0] => 10
7 )
8 */
9 print_r((array)100.09);
10 /*
11 Array
12 (
13 [0] => 100.09
14 )
15 */
16
17 print_r((array)0);
18 /*
19 Array
20 (
21 [0] => 0
22 )
23 */
24 print_r((array)-10);
25 /*
26 Array
27 (
28 [0] => -10
29 )
30 */
31 print_r((array)'string');
32 /*
33 Array
34 (
35 [0] => string
36 )
37 */
38 print_r((array)'0');
39 /*
40 Array
41 (
42 [0] => 0
43 )
44 */
45 print_r((array)true);
46 /*
47 Array
48 (
49 [0] => 1
50 )
51 */
52 print_r((array)FALSE);
53 /*
54 Array
55 (
56 [0] =>
57 )
58 */
59 print_r((array)NULL);
60 /*
61 Array
62 (
63 )
64 */
65
66 class A
67 {
68 private $_A = 'A'; //私有
69 protected $B; //受保护的
70 }
71
72 class B extends A
73 {
74 public $C; //公有
75 public function __construct()
76 {
77 $this->B = 'B';
78 $this->C = 'C';
79 }
80 }
81 print_r((array) new B());
82 /*
83 Array
84 (
85 [C] => C
86 [A_A] => A,私有变量前面会加上类名作为前缀
87 [*B] => B,受保护变量回家上*作为前缀
88 )
89 */
90 ?>
转为布尔型
要明确地将一个值转换成 boolean,用 (bool) 或者 (boolean) 来强制转换。
但是很多情况下不需要用强制转换,因为当运算符,函数或者流程控制结构需要一个 boolean 参数时,该值会被自动转换。
1 <?php
2 /**
3 * 当转换为 boolean 时,以下值被认为是 FALSE:
4 * 布尔值 FALSE 本身
5 * 整型值 0(零)
6 * 浮点型值 0.0(零)
7 * 空字符串,以及字符串 "0"
8 * 不包括任何元素的数组
9 * 不包括任何成员变量的对象(仅 PHP 4.0 适用)
10 * 特殊类型 NULL(包括尚未赋值的变量)
11 * 从空标记生成的 SimpleXML 对象
12 **/
13 var_dump(FALSE); #bool(false)
14 var_dump((boolean)''); #bool(false)
15 var_dump((boolean)'string'); #bool(true)
16 var_dump((boolean)'0'); #bool(false)
17 var_dump((boolean)1); #bool(true)
18 var_dump((boolean)1.0); #bool(true)
19 var_dump((boolean)-1); #bool(true)
20 var_dump((boolean)0); #bool(false)
21 var_dump((boolean)2.2e5); #bool(true)
22 var_dump((boolean)array('one','two')); #bool(true)
23 var_dump((boolean)array()); #bool(false)
24 $sTest = 'test';
25 unset($sTest);
26 var_dump((boolean)$sTest); #bool(false)
27 var_dump((boolean)null); #bool(false)
28 var_dump((boolean)$sNotDefined); #bool(false)
29 ?>
更详细的比较表格看 PHP 类型比较表 。
对null的判断
1 <?php
2 $a;
3 $b = null;
4 $c = 'null';
5 _is_null($a);
6 _is_null($b);
7 _is_null($c);
8 function _is_null($var)
9 {
10 echo '$var == null , ',var_dump($var == null).PHP_EOL;
11 echo '$var == \'null\' , ',var_dump($var == 'null').PHP_EOL;
12 echo 'is_null($var) , ',var_dump(is_null($var)).PHP_EOL;
13 echo '-------------------------------------'.PHP_EOL;
14 }
15 ?>
16 $var == null , bool(true)
17
18 $var == 'null' , bool(false)
19
20 is_null($var) , bool(true)
21
22 -------------------------------------
23 $var == null , bool(true)
24
25 $var == 'null' , bool(false)
26
27 is_null($var) , bool(true)
28
29 -------------------------------------
30 $var == null , bool(false)
31
32 $var == 'null' , bool(true)
33
34 is_null($var) , bool(false)
35
36 -------------------------------------