本文最后更新于:2024年3月18日 凌晨
PHP 数据类型
整型
整型都是整数,例如1,12和256,可接受的范围根据具体的平台而定,但是一般是从-2 147 483 648到+2 147 483 647,特别要注意的是,这个范围和C编译器中的长整型范围相同,不幸的是,C标准里没有指定长整型一定在什么范围内,所以在一些系统里会有不同的整型范围。
整型直接量可以用十进制,八进制或十六进制表示,十进制值由不以0开头的数字序列表示,这个数列可以用正号(+)或负号(-)开头,如果开头没有符号,就假设是正数,下面是十进制整型的例子:
八进制数由一个前导0和一个0-7的数字序列组成,和十进制数一样,八进制数可以有正好或负号作为前缀,下面是一些八进制值的例子和它们等值的十进制值:
十六进制数以0x开头,接着数字(0-9)或字母(A-F)的序列,字母可以大写或小写,但是一般使用大写,同十进制和八进制,十六进制数也可以包括符号:
如果尝试将一个太大的整数(如大于2,147,483,647)存储整型或不完成是数字的变量存储成整型,它会自动转换成一个浮点数。
使用is_int()
函数(或它的别名is_integer()
)来测试一个值是不是整型。
浮点型
浮点型(通常叫做实数)用十进制数字表示数值,和整型一样,它的范围限制由机器情况而定,PHP浮点数和C编译器中双精度型的范围一样,通常,允许数值在1.E-308和1.7E+308之间,精确到15位数字,如果整数值需要更高的精确度或更宽的范围,可以使用BC或GMP扩展。
PHP认可两种不同格式的浮点数书写,下面是我们每天都使用的一种格式:
浮点型的值仅仅是数的近似表示,例如,在很多系统里3.5实际上被表示为3.4999999999.这意味着写代码时要避免浮点数是完全精确的,例如使用==
直接比较两个浮点数的值,一般的做法是移动若干次小数点位置后再比较。
使用is_float()
函数(或它的别名is_real()
)来测试一个值是否是浮点数。
字符串
因为字符串在Web应用中时如此常见,所以PHP提供了创建和处理字符串的核心级支持,字符串时任意长度的字符序列,字符串直接量用单引号或双引号分隔:
变量用双引号括起来,单引号中的则不是(及单引号中的变量符号不解析):
1 2 3 4 5 6 $name ="Guido" ;echo "Hi,\$name\n" ;echo 'Hi,\$name' ; Hi,Guido Hi$name
双引号也支持多种字符转义,如下表所示:
转义序列
字符含义
"
双引号
\n
换行
\r
回车
\t
制表符
\
反斜杠
$
美元符号
{
左大括号
}
右大括号
[
左中括号
]
右中括号
\0~\777
用八进制表示的ASCII字符
\x0~\xFF
用十六进制表示的ASCII字符
单引号字符串可用\
得到一个反斜杠的直接量,用'
得到一个单引号的直接量:
1 $dos_path = 'C:\\WINDOWS||SYSTEM' ;
1 if ($a ==$b ){echo "a and b are equal" )
使用is_string()
函数测试一个值是否为字符串。
布尔型
布尔值表示一个真值,用于说明某事是真或假,和大多数程序语言一样,PHP定义一些值为true,另外一些为false,true或false决定了条件代码的结果。
在PHP中,下面的值为false:
关键字false
整数0
浮点数0.0
空字符串(“”)和字符串"0"
元素个数为0的数组。
没有值或函数的对象。
NULL值。
一个值不是假的就是真的,包括所有资源类型(Resource)变量的值。
为了明确起见,PHP提供了true和false关键字:
1 2 3 4 $x =5 ;$x =true $y ="" ;$y =false ;
使用is_bool()
函数来测试一个值是否是布尔型。
数组
数组保存了一组值,这些值可以由位置(n个数字,0是第一位)或一些标识性的名称(字符串)来确定和关联:
1 2 3 $person [0 ] = "Edison" ; person[1 ] = "Wankel" ;$person [2 ] = "Crapper" ;
1 2 3 $creator ['Light bulb' ] ="Edison" ;$creator ['Rotary Engine' ] = "Wankel" ;$creator ['Toilet' ] = "Crabpper" ;
1 2 3 $person = array ('Edison' ,'Wankel' ,'Crapper' );$creator = array ('Light bulb' =>'Edison' ,'Rotary Engine' =>'Wankel' ,'Toilet' =>'Crapper' );
有几种方式来遍历数组,最常用的是foreach循环:
1 2 3 4 5 6 foreach ($person as $name ){ echo "Hello,$name \n" ; } Hello,Edison Hello,Wankel Hello,Crapper
1 2 3 4 5 6 foreach ($creator as $invention =>$inventor ){ echo "inventor created the $invention \n" ; } Edison created the Light bulb Wankel created the Rotary Engine Crapper created the Toilet
1 2 sort($person ); asort($creator );
使用is_array()
函数来测试一个值是否为数组。
对象
PHP支持面向对象编程(OOP),OOP促进了清晰的模块化设计,简化列狂调试和维护并有助于代码重用。
类(class)是面向对象设计的基本单元,类是一个包含属性(变量)和方法(函数)的结构的定义,类用关键字class来定义:
1 2 3 4 5 6 7 8 9 Class Person { Public $name = ' ' ; Function name ($newname = NULL ) { if ( ! Is_null($newname )){ $this ->name = $newname ; } Return $this ->name; } }
一旦定义了一个类,可以用关键字new来生成这个类的任意多个对象,类的属性和方法可以用->符号来发访问:
1 2 3 4 $ed = new Person;$ed ->name('Edison' ); printf("Hello,%s\n" ,$ed ->name); Hello,Edison
使用is_object()
函数可测试一个值是否为对象。
资源
许多模块提供了一些函数来处理外部事务,例如:每一个数据库扩展至少有一个函数来连接数据库,一个函数来向数据库发送查询,一个函数来关闭数据库连接,因为可以同时打开多个数据库连接,连接函数需要提供标志不同连接的方法:资源(或称"句柄"),这样当你调用数据库查询和关闭函数时,才知道使用哪个链接。
资源实际上是整数,使用资源的主要好处是它会自己完成内存管理,当最后一个对资源值的引用销毁时,创建该资源的扩展被调用来为该资源释放所有内存,关闭所有连接等。
1 2 3 $res = database_connect(); datacase_query($res );$res = "boo" ;
在一个函数中我们最容易发现自动清空资源的好处,将资源指派给一个局部变量,当函数调用结束时,变量的值会自动被PHP回收:
1 2 3 4 function search ( ) { $res = database_connect(); database_query($res ); }
当没有任何对资源的引用时,它会自动关闭,尽管资源可以自动销毁,大多数扩展提供了一个特定的关闭或结束函数,在合适的地方显示地调用该函数,这种方式比依赖于变量作用域来触发资源销毁更好。
使用is_resource()
函数可测试一个值是否为资源。
NULL
NULL数据类型只有一个值,这个值可以通过不区分大小写的关键字NULL来使用,NULL值表示一个变量没有值(和Perl的undef或Python的None类似)
使用is_null()
函数来测试一个值是否为NULL