您的位置:首页 > 编程语言 > PHP开发

php 语言参考-数据类型

2015-01-05 14:43 309 查看
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,这样有时会导致意外的结果<?phpecho (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

本文出自 “芭菲雨的博客” 博客,请务必保留此出处http://bafeiyu.blog.51cto.com/5401101/1599296
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: