1、简介
php包括8中基本类型,其中4种标量类型boolean(布尔型),integer(整型),float(浮点型),string(字符串),2种复合类型array(数组),object(对象),还有两种特殊类型resource(资源),null。若是要查看一个变量的值和类型能够用var_dump();来输出,若是仅仅想看类型,能够用gettype()函数,另外要判断是否是某个类型能够用is_type()函数(好比is_null($a))。 php
2、布尔类型
布尔型说白了就是真的仍是假的,它只有两种值,要么真要么假。定义也很简单,只要只要把ture或者false赋值给变量便可。给布尔型变量赋值不区分大小写,$a=true;$a=TRUE,是等效的。 数组
当转换为 boolean 时,如下值被认为是 FALSE: 函数
除以上之外任何值都是TRUE。 spa
布尔型不须要手工转换,通常在程序中须要用到布尔型的时候程序会自动转换 .net
在用布尔型做为流程控制的时候必定要注意if($a=1) ,if($a==1)以及if($a===1)的区别,=是赋值语句不属于以上状况,因此永远是真,==和===都是比较运算符,前者不检查类型,后者检查类型,即类型和值都相同才会相等。还有要注意的是字符串’0.0′转换后也是true。 code
3、整型
整型说来了就是整数,包括正整数和负整数,通常的范围是-231~231-1。 对象
整型值可使用十进制,十六进制或八进制表示,前面能够加上可选的符号(- 或者 +)。 资源
八进制表示数字前必须加上 0(零),十六进制表示数字前必须加上 0x。下面的代码都是真确的定义(之后介绍进制之间的转换): 文档
3 |
$a = 0123; // 八进制数 (等于十进制 83) |
4 |
$a = 0x1A; // 十六进制数 (等于十进制 26) |
注意:若是向八进制数传递了一个非法数字(即 8 或 9),则后面其他数字会被忽略。 字符串
注意:若是给定的一个数超出了 integer 的范围,将会被解释为 float。一样若是执行的运算结果超出了integer 范围,也会返回 float。
要将其余类型转换成整形能够经过(int) 或 (integer) 强制转换,也能够经过函数intval()来实现。
从布尔类型转换:FALSE 将产生出 0(零),TRUE 将产生出 1(壹)。
从浮点数转换:将舍去小数。若是浮点数超出了整数范围(一般为 +/- 2.15e+9 = 2^31),则结果不肯定,
从字符串转换:若是字符串 没有包含 ‘.’,’e'或’E’ 而且数字值符合整数类型的限定, 这个 字符串 可被认定是一个 整型, 在其它状况下被认定为一个float。若是 字符串 以合法的数字开始,这个数字可直接使用。 不然,值就是 0 (零)。 合法数值由符号,后面跟着一个或多个数字(可能有个小数点),再跟着可选的指数符号如’e’ 或 ‘E’,后面跟着一个或多个数字。
运行下面的代码看看效果吧
03 |
var_dump($large_number); |
06 |
$large_number = 2147483648; |
07 |
var_dump($large_number); |
08 |
//// 输出为:float(2147483648) |
10 |
var_dump((int)false); //0 |
11 |
var_dump((int)true); //1 |
12 |
var_dump((int)2.01); //2 |
13 |
var_dump((int)2.01+(int)3.99); //5 |
14 |
var_dump((int)3.99);//3 |
15 |
var_dump((int)(2000000000*2+200000003)); //随数字变化 |
17 |
var_dump('1.23' > '01.23'); // bool(false) 等价于1>1 |
18 |
var_dump('1.22.00' > '01.23.00'); // bool(true) 等价于1>0 |
19 |
var_dump('1-22-00' > '01-23-00'); // bool(true) 等价于1>0 |
20 |
var_dump((float)'1.22.00' > (float)'01.23.00'); // bool(false)等价于1.22>1.23 |
4、浮点型
浮点型通俗点讲就是小数。浮点数的字长和平台相关,一般最大值是 1.8e308 并具备 14 位十进制数字的精度。一下定义都是真确的:
注意:简单的十进制分数如同 0.1 或 0.7 不能在不丢失一点点精度的状况下转换为内部二进制的格式。这就会形成混乱的结果:例如,var_dump((int)((0.1+0.7)*10));一般会返回 7 而不是预期中的 8,由于该结果内部的表示实际上是相似 7.9。
这和一个事实有关,那就是不可能精确的用有限位数表达某些十进制分数。例如,十进制的 1/3 变成了0.3。因此永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。
字符串转换成浮点数和字符串转换成整数规则相同;对于其它类型的值,其状况相似于先将值转换成整型,而后再转换成浮点。赶忙去试试下面这段神奇的代码吧。
4 |
var_dump((int)(($a+$b)*10));//结果是7不是8 |
php数据类型(二)
本文固定连接: http://www.qaforcode.net/archives/169 | 猪哥每日一贴