PHP 数据类型

本文最后更新于:2024年3月18日 凌晨

PHP 数据类型

整型

  • 整型都是整数,例如1,12和256,可接受的范围根据具体的平台而定,但是一般是从-2 147 483 648到+2 147 483 647,特别要注意的是,这个范围和C编译器中的长整型范围相同,不幸的是,C标准里没有指定长整型一定在什么范围内,所以在一些系统里会有不同的整型范围。
  • 整型直接量可以用十进制,八进制或十六进制表示,十进制值由不以0开头的数字序列表示,这个数列可以用正号(+)或负号(-)开头,如果开头没有符号,就假设是正数,下面是十进制整型的例子:
1
2
3
1998
-641
+33
  • 八进制数由一个前导0和一个0-7的数字序列组成,和十进制数一样,八进制数可以有正好或负号作为前缀,下面是一些八进制值的例子和它们等值的十进制值:
1
2
0755	// 十进制数为493
+010 // 十进制数为8

十六进制数以0x开头,接着数字(0-9)或字母(A-F)的序列,字母可以大写或小写,但是一般使用大写,同十进制和八进制,十六进制数也可以包括符号:

1
2
3
0xFF// 十进制数为255
0x10// 十进制数为16
-0xDAD1// 十进制数为-56017
  • 如果尝试将一个太大的整数(如大于2,147,483,647)存储整型或不完成是数字的变量存储成整型,它会自动转换成一个浮点数。
  • 使用is_int()函数(或它的别名is_integer())来测试一个值是不是整型。

浮点型

  • 浮点型(通常叫做实数)用十进制数字表示数值,和整型一样,它的范围限制由机器情况而定,PHP浮点数和C编译器中双精度型的范围一样,通常,允许数值在1.E-308和1.7E+308之间,精确到15位数字,如果整数值需要更高的精确度或更宽的范围,可以使用BC或GMP扩展。
  • PHP认可两种不同格式的浮点数书写,下面是我们每天都使用的一种格式:
1
2
3
3.14
0.017
-7.1
  • PHP也认可使用科学计数法表示数:
1
2
3
0.314E1
0.314*101
3.14
  • 浮点型的值仅仅是数的近似表示,例如,在很多系统里3.5实际上被表示为3.4999999999.这意味着写代码时要避免浮点数是完全精确的,例如使用==直接比较两个浮点数的值,一般的做法是移动若干次小数点位置后再比较。
  • 使用is_float()函数(或它的别名is_real())来测试一个值是否是浮点数。

字符串

  • 因为字符串在Web应用中时如此常见,所以PHP提供了创建和处理字符串的核心级支持,字符串时任意长度的字符序列,字符串直接量用单引号或双引号分隔:
1
2
'big dog'
"fat hog"
  • 变量用双引号括起来,单引号中的则不是(及单引号中的变量符号不解析):
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值。
$x=true// 用更清楚的方式来填写。
$y="";//$y有一个false值。
$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";
  • Array()构造了一个数组:
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

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!