php 语言参考-数据类型
更新:HHH   时间:2023-1-7


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

 


返回web开发教程...