1.类型介绍:
php支持8种原始类型
四种标量类型
。布尔型boolean
。×××(integer)
。浮点型(float)(浮点数,也做double)
。字符串(string)
两种复合类型
。数组(array)
。对象(object)
最后是两种特殊类型
。资源(resource)
。null
为了确保代码的易读性,本手册还介绍了一些伪类型
。混合(mixed)
。数字(number)
。回馈(callback)
你可能还会读到一些关于双精度double类型的参考。实际上double和float是相同的,由于一些历史原因这两个名词同时存在
变量的类型通常不是由程序员设定的,确切的说是有php根据该变量使用的上线问运行时决定的
注:如果你想查看某个表达式的值和类型,用var_dump()。
注:如果你只想看到一个以读懂的类型的表达方式用于调试,用gettype().要查看某个类型,不要用gettype(),而用is_type()函数,以下是一些范例:
<?php $bool=TRUE;//a boolean $str="foo";//a string $int=12;//an integer echo gettype($bool);//prints out "boolean" echo gettype($str);//print out "string" //If this is an integer, increment it by four if(is_int($int)) { $int+=4; } //If $bool is a string,print it out //(does not print out anything) if(is_string($bool)) { echo "String:$bool"; } ?>
如果你要将一个变量强制转换成某类型,可以对其使用强制转换或者settype()函数。
注意变量很据当时的类型在特定场合下会表现出不同的值。更多类型件类型戏法。此外你还可以参考 php类型比较表 看不同类型相互比较的例子。
2。布尔型
这是最简单的类型。boolean 表达了真值。可以为true或者false
注:布尔类型是php4引进的
语法
要制定一个布尔值,使用关键字true或者false,两个都是大小写不敏感的
<?php
$foo=True;//assign the value TRUE to $foo
?>
通常你用某些运算符返回boolean值,并将其传递给流程控制
//==is an operator which test //equality and returns a boolean if($action=="show_version"){ echo "The version is 1.23"; } //this is not necessary... if($show+separators==true){ echo "<hr>\n"; } //...because you can simply type if($show_separators){ echo "<hr>\n"; }
转换成布尔值
要明示地将一个值转换成boolean,用bool或者boolean来强制转换。但是很多情况下不需要强制转换,因为当运算符,函数或者流程控制需要一个boolean参数时,该值会被自动转换。
参见类型戏法
当转换成boolean时,以下值被认为是false
。布尔值false
。整型值 0(零)
。浮点型值0.0(零)
。空白字符串和字符串“0”
。没有成员变量的数组
。没有单元的对象
。特殊类型null(包括尚未定义的变量)
所有其他值都被认为是true(包括任何资源)
警告:
-1和其他非零值(不论正负)一样,被认为是true
<?php echo gettype((bool)"");//bool(false) echo gettype((bool)1);//bool(true) echo gettype((bool)-2);//bool(true) echo gettyope((bool)"foo");//bool(true) echo gettype((bool)2.3e5);//bool(true) echo gettype((bool)array(12));//bool(true) echo gettype((bool)array());//bool(false) ?>
3.×××
一个integer是集合Z={...,-2,-1,0,1,2,...}中的一个数。
参见任意长度证书/GMP,浮点数 和任意精度数学库/BCMath
语法
整型值可以用10进制,16进制或8进制符号指定,前面可以加上可选的符号(—或者+)
如果用8进制符号,数字前必须加上0,用16进制符号数字前必须加上0x
例子 6-1 整数文字表达
<?php
$a=1234;#10进制数
$a=-123;#10进制数
$a=0123;#八进制数(等于10进制的83)
?>
在字面上,×××变量正式的结构可以为:
<?php decimal :[1-9][0-9]* |0 hexadecimal:0[xX][0-9a-fA-F]+ octal :0[0-7]+ integer :[+-]?decimal |[+-]?hexadecimal |[+-]?octal ?>
×××的字长和平台有关,尽管通常最大值是大约20亿(32位有符号),php不支持无符号整数
整数溢出
如果你指定了一个数超出了integer的范围,竟会被解释为float.同样如果你执行的运算结果超出了integer范围,也会返回float
<?php $large_number=2147483647; var_dump($large_number); //输出为:int(2147483647) $large_number=2147483648; var_dump($large_number); //输出为:float(2147483648) //同样也适用于16进制的表示的整数 var_dump(0x80000000); //输出为:float(2147483648) $million=1000000; $large_number=50000*$nillion; var_dump($larger_number); //输出为:float(50000000000) ?>
警告:
不幸的是php中有个bug,因此当有负数参与结果是并不总是正确。
例如当运算-50000*¥million是结果是-429496728.不过当两个运算数都是正数时就没有问题
这个问题在php4.1.0中解决了
php中没有整出的运算符。1/2产生浮点数0.5.您可以总是舍弃小数部分,或者使用round()函数
<?php var_dump(25/7);//float(3.5714285714286) var_dump((int)(25/7));//int(3) var_dump(round(25/7));float(4) ?>
转换为×××
要明示地将一个值转换为integer,用(int)或(integer)强制转换。
不过大多数情况下都不需要强制转换。因为当运算符,函数,或者流程控制需要一个integer参数时值会自动转换
。您还可以通过函数intval()来将一个值转换成×××
从布尔值转换
false将产生0(零),true将产生1(壹)
从浮点数转换
当从浮点数转换成正数时,数字将被取整(丢弃小数位)
如果浮点数超出了整数范围(通常为+/- 2.15e+9=2^31),则结果不确定
,因为没有足够的精度使浮点数给出一个确切的整数结果。在此情况下没有警告,甚至没有任何通知!
译者注:在linux下返回的结果是最小负数(-2147483648),而在windows下返回的结果是0
警告:
绝不要将未知的分数强制转换为integer,这样有时会导致意外的结果
<?php
echo (int)((0.1+0.7)*10);//显示7!
?>
从字符串转换
注意:
没有定义从其他类型转换为×××的行为。目前的行为和值先转换为布尔值一样。不过不要依靠此行为,因为它会未加通知的改变。
4.浮点型
浮点数(也叫“float”,"doubles"或“real numbers”)可以用以下任何语法定义
<?php
$a=1.234;
$a=1.2e3;
$a=7E-10;
?>
形式上:
LNUM [0-9]+ DNUM ([0-9]*[\.]{LNUM})|({LNUM}[\.][0-9]*) EXPONENT_DNUM(({LNUM}|{DNUM})[eE][+-]?{LNUM})
浮点数的字长和平台相关,尽管通常最大值是1.8e308并具有14位十进制数字的精度(64位IEEE格式)
浮点数精度
显然简单的十进制分数如同0.1或0.7不能在不丢失一点点精度的情况下转换为内部二进制的格式,这样会造成混乱的结果:例如floor((0.1+0.7)*10)通常会返回7而不是预期中的8,因为该结果内部的表示其实是类似7.9999999.。。。
这和一个事实有关,那就是那就是不可能用精确的用有限位数表达十进制分数。例如十进制1/3变成了0.3333333.
所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。如果确实需要更高的精度,应该使用任意精度数学函数库gmp函数库
转换为浮点数:
如果您洗完了解有关何时和如何将字符串转换成浮点数的信息,请查阅标题为“将字符串转换为数字”的有关章节。对于其他类型的值,其情况类似于先将值转换为×××,然后再转换成浮点。
5.字符串
string是一系列字符。在php中,字符和字节一样,也就是说,一共有256种不同字符的可能性。这也暗示,php和unicode没有本地支持。请参阅utf8_encode和utf8_decode
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。