第3章 PHP数据类型
任何编程语言都有数据类型,PHP 也不例外。但和 C、Java 等“强类型”程序语言不
同,PHP 属于“弱类型”语言,即数据在使用之前无须声明类型,同时可在运行期间根据
实际情况动态地转换类型,以及对这些数据类型进行转换操作。
3.1 数据类型的种类
PHP 支持整型、浮点型、字符串型、bool 型、资源、NULL、数组、对象 8 种类型,
这里介绍前六种数据类型,数组和对象将会在后两章介绍。
3.1.1 整型
一个整型(integer)是集合 Z={…,–2,–1,0,1,2,…}中的一个数,可以用十六进制、十进
制或八进制符号指定,前面可以加上可选的符号(–或者+)表示正、负,如果用八进制符号,
数字前必须加上 0(零),用十六进制符号数字前必须加上 0x。
实例 3-1:有关整型的实例
<?php
$a = 77; //一个十进制整数
$b = -77; //一个十进制负整数
$x = 077; //一个八进制整数
$y = 0x77; //一个十六进制整数
echo "数字 77 在不同进制下的输出结果:<p>";
echo "十进制输出结果:$a<br />";
echo "八进制输出结果:$x<br />";
echo "十六进制输出结果:$y<br />";
//打印变量$b
var_dump($b);
echo gettype($b);
运行上述代码,结果如图 3-1 所示。
第 1 篇 基础知识
. 54 .
图 3-1 有关整型的实例
注意:
如果给定的数值超过整型 int 所能表示的最大范围,将会被当做浮点型 float 来处理,
这就叫做整型溢出。在本实例中,用到了 gettype( )函数,此函数是用来获得某个变量的类
型,但是读者在程序开发中不要使用 gettype( )来测试变量的类型,因为其返回值在不同的
PHP 版本中可能不相同,另外,由于包含了字符串的比较,其运行速度也很慢。
3.1.2 浮点型
浮点型也叫浮点数、双精度数或实数,是用来表示带有小数点的数的一种数据类型,
其精度比整型大很多,在 32 位操作系统中,float 型变量的有效范围是 1.7E-308~1.7E+308。
浮点型数据有两种书写格式:一种就是我们经常用到的普通表示法,例如 3.1415926;还有
一种是科学表示法,例如 3.1415926E1。
实例 3-2:有关浮点数的实例
<?php
echo "下面通过圆周率来说明浮点数的表示方法:<p>";
$pi1 = 3.14159265359; //传统的浮点数表示法
$pi2 = 314159265359e-11; //科学计数法表示的浮点数
echo '传统书写格式:pi=' . $pi1 . '<p>';
echo '科学计数法:pi=' . $pi2 . '<p>';
echo '调用圆周率函数 pi()=' . pi() . '<p>'; //调用 pi 函数输出圆周率
var_dump($pi1);
echo gettype($pi1);
?
>
运行上述代码,结果如图 3-2 所示。
图 3-2 有关浮点数的实例
第 3 章 PHP 数据类型
. 55 .
注意:
浮点型表示的变量值是一种近似的值,比如用浮点数表示 100,在计算机内部可能是
类似 99.9999999…,所以尽量避免比较两个浮点类型值的大小,因为它只是一种精度较高
的近似值。
3.1.3 字符串型
字符串(string)是一系列字符。在 PHP 中,字符和字节一样,也就是说,一共有 256 种
不同字符的可能性。这也暗示 PHP 对 Unicode 没有本地支持(需使用 utf8_encode( )和
utf8_decode( )函数)。字符串可用单引号、双引号和定界符来定义。
实例 3-3:有关字符串类型的实例
<?php
$s = 'Hello,World PHP!';
echo 'this is a simple string' . '<p>';
echo "this is a simple string <p>";
//在单引号字符串中表示单引号需要用反斜线(\)转义
echo 'phpor once said: "I\'ll be back"' . '<p>';
//在双引号字符串中表示单引号不需要反斜线转义,但表示双引号,需要转义
echo "phpor once said: \"I'll be back\" <p>";
e
cho 'You deleted C:\\*.*?' . '<p>';
echo "You deleted C:\\*.*?<p>";
e
cho 'This will not expand: \n a newline' . '<p>';
echo "This will not expand: \n a newline <p>";
//在单引号字符串中出现的变量不会用变量的值代替,而是直接输出
echo 'Variables do not $expand $either' . '<p>';
//在双引号字符串中出现的变量会用值代替
echo "Variables do not $expand $either <p>";
echo gettype($s);
//换行
echo "<br />";
echo <<<PHPOR
这是字符串的定界符测试。<p>
看看效果如何?
PHPOR;
?>
运行上述代码,结果如图 3-3 所示。
第 1 篇 基础知识
. 56 .
图 3-3 有关字符串类型的实例
知识点:
指定一个字符串最简单的方式就是用单引号括起来,但是在单引号中不能再引用单引
号,如果非要在单引号包括的字符串中表示一个单引号,需要用反斜线\转义,同样,如果
想在单引号包括的字符串中表示反斜线本身,也需要用反斜线\转义。即在单引号中可以使
用反斜线转义字符“\”,不过只能转义反斜线本身和单引号。另外在单引号中出现的变量
是不会被变量的值替代,而是原样输出,请仔细观看实例。
更多的时候字符串是用双引号包括起来的,用双引号包括的字符串,可以转义更多的
特殊字符。比如用反斜线转义字符“\”连接的,有“\n”表示换行符、“\r”表示回车符、
“\t”表示制表符、“\$”表示美元符、“\”表示双引号、“\\”表示反斜线、“\[0-7]{1,3}”
表示一个用八进制表示的字符。最重要的是双引号包括的变量是会被解析成变量的值,而
不是变量本身了。仔细观察实例。
定界符“<<<”和双引号表示法一样,唯一不同的是,定界符可以表示多行。
3.1.4 布尔型
布尔型是最简单的类型,表达了真值,可以为 true 或 false,不区分大小写,是 PHP4
引进的,通常用某些运算符返回 boolean 值,并将其传递给控制流程。
实例 3-4:有关布尔型的实例
<?php
$boo = true;
var_dump($boo);
第 3 章 PHP 数据类型
. 57 .
echo gettype($boo);
echo '<br />';
if (is_bool($boo)) {
echo "boolean:$boo"; //打印出 1
}
if (is_string($b)) {
echo "string:$boo"; //什么也没有打印出来,因为$boo 不是 string 类型
}
echo "<br /> <hr>";
var_dump((bool) ""); //bool(false)
var_dump((bool) 1); //bool(true)
var_dump((bool) -2); //bool(true)
var_dump((bool) "foo"); //bool(true)
var_dump((bool) 2.3e5); //bool(true)
var_dump((bool) array(12));//bool(true)
var_dump((bool) array()); //bool(false)
var_dump((bool) "false"); //bool(true)
?
>
运行上述代码,结果如图 3-4 所示。
图 3-4 有关布尔型的实例
知识点:
PHP 中布尔型不是只有 true 和 false 两个值,当运算符、函数或者流程控制需要一个
boolean 参数,任何类型的值都会被自动转换成布尔型。以下值将会被认为是 flase:布尔
型 false、整型值 0、浮点型 0.0、空白字符串和字符串"0"、无成员变量的数组、无单元的
对象、特殊类型 null;而其他所有值将会被认为是 true。
3.1.5 资源类型和 NULL
资源(resource)和 NULL 是 PHP 中的特殊数据类型。资源类型主要描述一个 PHP 的扩
展资源,比如一个数据库查询、一个打开的文件句柄、一个数据库连接或更多的其他扩展
类型等。
第 1 篇 基础知识
. 58 .
实例 3-5:资源类型
<?php
//使用 mysql_connect 函数连接本地数据库,返回 MySQL 的连接资源
$dbcon = mysql_connect('localhost', 'root', '0');
var_dump($dbcon); //打印$dbcon 资源的所有内容
echo "<br />";
//用函数 fopen 打开 php.ini 文件,返回打开的文件资源
$file_handle = fopen("D:/Program Files/php/php.ini", "r+");
var_dump($file_handle); //打印$file_handle 资源的所有内容
echo "<br />";
//用函数 opendir()打开目录,返回打开的目录资源
$dir_handle = opendir("D:/Program Files/php/");
var_dump($dir_handle); //打印$dir_handle 资源的所有内容
echo "<br />";
?
>
运行上述代码,结果如图 3-5 所示。
图 3-5 资源类型
注意:
资源类型是不能被用户直接操作的变量类型,只能查看其值,然后通过 var_dump 打
印该对象。但是某些函数必须引用相应的资源才能工作,例如,打开的文件的资源类型
$file_handle,后续的各种对文件的写入、读取操作,都需要对此资源进行引用。
NULL 类型也是 PHP 中的一个特殊类型,其值只能是 NULL。NULL 值即不表示空格
也不表示为 0,更不是空字符串,而是表示一个变量的值为空。当一个变量满足以下某个
条件时,变量的值为 NULL:变量直接被赋值为 NULL、变量在没赋值之前默认为 NULL、
使用 unset( )函数删除一个变量后此变量的值也为 NULL。
实例 3-6:有关 NULL 类型的实例
<?php
$str2 = null; //变量 str2 被赋空值
$str3 = "string"; //变量 str3 被赋 string
if (is_null($str1)) //判断 str1 是否为空
echo "str1=null<br />";
if (is_null($str2)) //判断 str2 是否为空
第 3 章 PHP 数据类型
. 59 .
echo "str2=null<br />";
if (is_null($str3)) //判断 str3 是否为空
echo "str3 是 null";
else
echo "str3 不是 null<br />";
echo "被 unset()函数处理过的\$str3:<br />";
unset($str3);
if (is_null($str3)) //判断处理之后 str3 是否为空
echo "str3=null<br />";
?
>
运行上述代码,结果如图 3-6 所示。
图 3-6 NULL 类型
3.2 数据类型的转换
上一小节介绍了 PHP 支持的各种数据类型。这里将介绍 PHP 中数据类型的转换。这
里有两种方法:一种是直接输入目标数据类型来实现;另一种是通过 settype( )函数来实现。
3.2.1 伪类型
PHP 是弱类型语言,所以在一些函数中,将其函数参数可以是多种数据类型,还可以
用别的函数作为回调函数使用。在本小节将介绍以下三种常用的伪类型。
(1) mixed:说明函数的参数可以接受多种不同的但并不必须是所有的数据类型。例如
gettype( )、settype( )等可以接受所有的数据类型。
(2) number:说明函数的参数可以为 integer 或者 float。
(3) callback:有些诸如 call_user_function( )或 usort( )的函数接受用户自定义的函数作
为一个参数。callback 函数不仅可以是一个简单的函数,它还可以是一个对象的方法,包
括静态类的方法。一个 PHP 函数用函数名字符串来传递。可以传递任何内置的或者用户自
定义的函数,除了语言结构,例如 array( )、echo( )、empty( )、eval( )、exit( )、isset( )、list( )、
print( )和 unset( )。
第 1 篇 基础知识
……