.

PHP 数据类型3

文章作者:eKing
发表时间:2016年11月13日 06:47
浏览次数:118

PHP 数据类型

PHP 数据类型

PHP 支持八种原始类型(type)。

四种标量类型:

string(字符串)

integer(整型)

float(浮点型,也作 double )

boolean(布尔型)

两种复合类型:

array(数组)

object(对象)

两种特殊类型:

resource(资源)

NULL(空)

查看变量类型

通过 gettype() 函数可以方便的查看某个变量的类型:

<?php

$var_bool = TRUE; // a boolean

$var_str = "foo"; // a string

$var_int = 12; // an integer

echo gettype($var_bool); // 输出 boolean

echo gettype($var_str); // 输出 string

echo gettype($var_int); // 输出 integer

?>

提示

由于历史原因,如果是 float 类型数据,gettype() 函数返回的是 double,而不是 float 。

如果想查看某个表达式的值和类型,请使用用 var_dump() 函数。

判断变量类型

如果想通过判断变量类型来确定下一步逻辑动作,不要使用 gettype() ,而使用 is_type 系列函数:

<?php

$var_int = 12;

// 如果 $var_int 是 int 类型,这进行加法

if (is_int($var_int)) {

$var_int = $var_int+4;

}

echo $var_int; // 输出 16

?>

如果要将一个变量强制转换为某类型,请参阅《PHP 数据类型转换》。

PHP 数据类型 - 字符串(string)类型

字符串类型

定义字符串类型例子:

$var_char = "你好!";

在该例子中,我们定义了一个字符串:你好! ,并把这个字符串赋值给变量 $var_char ,那么该变量也自动被定义为字符串(string)类型。

定义字符串有 3 种方法:

单引号(')

双引号(")

定界符(<<<)

单引号定义

将字符串用单引号(')括起来是定义字符串最简单的方法:

<?php

$var_char = '这是一些字符串';

?>

如果字符串中有单引号,那么需要使用反斜线()进行转义:

<?php

$var_char = '字符串中包含'需要转义';

echo $var_char; //输出:字符串中包含'需要转义

?>

提示:如果在单引号之前或字符串结尾需要出现一个反斜线,需要用两个反斜线表示。换言之反斜线在此只转义 ' 字符而不会转义其他字符。

如果只是定义一个简单的字符串而不需要解析更多的内容,显然用单引号效率更高。

双引号定义

如果用双引号(")定义字符串,PHP 懂得更多特殊字符的转义序列:

转义序列 说明

\n 换行

\r 回车

\t 水平制表符

\[/td> 反斜线

\$ 美元符号

\" 双引号

\[0-7]{1,3} 此正则表达式序列匹配一个用八进制符号表示的字符

\x[0-9A-Fa-f]{1,2} 此正则表达式序列匹配一个用十六进制符号表示的字符

例子:

<?php

$var_char = "这里有个换行\n这是第二行文字";

?>

运行该例子,查看网页源代码显示:

这里有个换行

这是第二行文字

注意该例子中的换行是指文本意义上换行,如果需要在浏览器里显示换行,需要用 nl2br() 函数将 \n 替换成 <br />。

双引号字符串最重要的一点是其中的变量名会被变量值解析替代:

<?php

$var_char = "这是一些文字";

echo "请打印这些文字:$var_char"; //输出:请打印这些文字:这是一些文字

?>

定界符定义

定界符定义字符串是使用定界符语法(<<<),并在定界符之后提供一个标识符,然后是被定义的字符串,最后是同样的标识符结束字符串定义。

例子:

<?php

$str = <<<EOD

我是用定界符定义字符串的例子

这是其他更多字符

……

EOD;

?>

该例子中,EOD 就是标识符。结束标识符必须从行的第一列开始。同样,标识符也必须遵循 PHP 中其它任何标签的命名规则:只能包含字母数字下划线,而且必须以下划线或非数字字符开始。

注意:结束标识符所在的行不能有任何其他字符(可能除了一个分号 ; 之外),包括行缩进等。

提示

字符串不仅仅指上面例子所示的若干文字字符,也可以把数字定义为字符串,甚至巨大的长文本,这是和数据库中的 char 定义不一样的地方。

PHP 数据类型 - 整型(integer)

整型

整型是指 {..., -2, -1, 0, 1, 2, ...} 集合中的一个数。

定义整型的例子:

$var_int = 12345;

整型值可以用十进制,十六进制或八进制符号指定,如果用八进制符号,数字前必须加上 0(零),用十六进制符号数字前必须加上 0x:

$var_int = 0123; // 八进制数(等于十进制的 83)

$var_int2 = 0x1A; // 十六进制数(等于十进制的 26)

提示:整型数据不需要单引号或双引号,否则会被当作字符串类型来定义。

整数溢出

如果给定的一个数超出了 integer 的范围,将会被解释为 float类型 。同样如果执行的运算结果超出了 integer 范围,也会返回 float。

整型数的范围和平台有关,通常最大值是大约二十亿(32 位有符号)。

PHP 数据类型 - 浮点型(float or double)

浮点型

浮点型几乎可以定义任意的数字。

定义浮点型的例子:

$float_num = 12.11;

浮点数的字长和平台相关,尽管通常最大值是 1.8e308 并具有 14 位十进制数字的精度(64 位 IEEE 格式)。

PHP 数据类型 - 布尔型(boolean)

布尔型

布尔类型分为两类:

TRUE:表示事实成立,为真,也可写作true

FALSE:表示事实不成立,为假,也可写作false

例如将两个数字作比较( == 为比较运算符,参见《PHP 运算符》):

<?php

$num1 = 2;

$num2 = 5;

if($num1 == $num2){

echo '$num1 等于 $num2';

} else {

echo '$num1 不等于 $num2';

}

?>

运行该例子,浏览器输出:

$num1 不等于 $num2

对于 $num1 == $num2 的比较结果 FALSE 是一个逻辑结果,而不能直接调用 echo 等指令输出 FALSE ,而应该用流程控制来获取。关于流程控制参见《PHP 流程控制》。

转换为布尔值

很多情况下我们需要对值进行布尔判断,大部分情况下不需要用强制转换,因为当运算符、函数或者流程控制需要一个 boolean 参数时,该值会被自动转换。

当其他类型转换为 boolean 时,以下值被认为是 FALSE :

整型值 0(零)

浮点型值 0.0(零)

空白字符串和字符串 "0"

没有成员变量的数组

没有单元的对象(仅适用于 PHP 4)

特殊类型 NULL(包括尚未设定的变量)

除上所列意外的所有其它值都被认为是 TRUE(包括任何资源)。

PHP 数据类型 - 数组(array)

数组

数组是 PHP 中被经常使用的数据类型,可以用 array() 语言结构来新建一个数组:

$arr = array("foo" => "bar", 12 => TRUE);

echo $arr<"foo">; //输出:bar

echo $arr<12>; //输出:1

例子中,"foo" 与 12 称为键名(key),"bar" 与 TRUE 为对应的值。数组实体都包含键名和值两项。

在这个数组里,包含了2个类型:

$arr["foo"]:值为 "bar" ,字符串类型

$arr[12]:值为TRUE ,布尔型

提示

应该始终在用字符串表示的键名加上引号。例如用 $arr<'bar'> 或 $arr<"bar"> 而不是 $arr。

关于 PHP 数组更详细的介绍参见《PHP 数组》。

PHP 数据类型 - 对象(object)

对象

使用 new 关键字实例化一个对象:

<?php

//定义一个类

class foo {

function do_foo() {

echo "你好!";

}

}

$bar = new foo; //实例化一个对象

$bar->do_foo(); //执行do_foo,输出“你好!”

?>

关于 PHP 类及对象更详细的介绍参见《PHP 类与对象》。

PHP 数据类型 - 资源(resource)

资源

资源是一种特殊的变量类型,保存了到外部资源的一个引用:如打开文件、数据库连接、图形画布区域等。

资源是通过专门的函数来建立和使用的。

例子:

<?php

if(!file_exists("test.txt")){

$fh = fopen("test.txt","w"); //打开文件

echo get_resource_type($fh); // 输出:stream

fclose($fh); //关闭文件

}

?>

转换为资源

由于资源类型变量保存有为打开文件、数据库连接、图形画布区域等的特殊句柄,因此无法将其它类型的值转换为资源。

释放资源

由于 PHP4 Zend 引擎引进了资源计数系统,可以自动检测到一个资源不再被引用了(和 Java 一样)。这种情况下此资源使用的所有外部资源都会被垃圾回收系统释放。因此,很少需要用某些 free-result 函数来手工释放内存。

注意: 持久数据库连接比较特殊,它们不会被垃圾回收系统破坏。具体可参见《MySQL 数据库连接》。

PHP 数据类型 - NULL

NULL

特殊的 NULL 值表示一个变量没有值,NULL 类型唯一可能的值就是 NULL。

在下列情况下一个变量被认为是 NULL:

被赋值为 NULL

尚未被赋值

被 unset()

提示

NULL不可写作null。

is_null()

is_null() 函数检测变量是否为 NULL ,如果变量是 NULL 则返回 TRUE,否则返回 FALSE。

<?php

$var = NULL;

if(is_null($var)){

echo '$var 为 NULL';

} else {

echo '$var 变量非 NULL';

}

?>

运行该例子,浏览器输出:

$var 变量为 NULL

PHP 数据类型转换

类型强制转换

PHP 中的类型强制转换和 C 中的非常像:在要转换的变量之前加上用括号括起来的目标类型:

<?php

$foo = 10; // $foo 为整型

$bar = (boolean) $foo; // $bar 为布尔型

?>

允许的强制转换有:

(int)或(integer) - 转换成整型

(bool)或(boolean) - 转换成布尔型

(float)或(double)或(real) - 转换成浮点型

(string) - 转换成字符串

(array) - 转换成数组

(object) - 转换成对象

另外,将一个变量还原为字符串,还可以将变量放置在双引号中:

<?php

$foo = 10; // $foo 为整型

$str = "$foo"; // $str 为字符串

?>

类型戏法

PHP 在变量定义中不需要(或不支持)明示的类型定义,变量类型是根据使用该变量的上下文所决定的:

<?php

$foo = "0"; // $foo 为字符型

$foo = $foo+2; // $foo 现在为整型,值为2

$foo = $foo + 1.3; // $foo 为浮点型:3.3

$foo2 = 5 + "10 Little Piggies"; // $foo2 为整型,参考下面 延伸阅读 部分

?>

延伸阅读

当一个字符串被当作数字来求值时,根据以下规则来决定结果的类型和值:

如果包括“.”,“e”或“E”其中任何一个字符的话,字符串被当作 float 来求值,否则就被当作整数

该值由字符串最前面的部分决定。如果字符串以合法的数字数据开始,就用该数字作为其值,否则其值为 0(零)。合法数字数据由可选的正负号开始,后面跟着一个或多个数字(可选地包括十进制分数),后面跟着可选的指数。指数是一个“e”或者“E”后面跟着一个或多个数字

例子:

<?php

$foo = 1 + "10.5"; // $foo为浮点型:11.5

$foo = 1 + "-1.3e3"; // $foo 为浮点型:-1299

$foo = 1 + "bob-1.3e3"; // $foo 为整型:1

$foo = 1 + "bob3"; // $foo为整型:1

$foo = 1 + "10 Small Pigs"; // $foo为整型:11

$foo = "10.0 pigs " + 1; // $foo 为浮点型:11

?>

提示

前面说过,PHP是一门松散类型的语言,不必对使用的变量做专门的定义,这给程序的编写带来很大的灵活与方便。但我们在程序编写过程中,需要知道自己使用的变量是哪种类型的,因为变量始终有一种类型与之对应。尽管各类型之间几乎可以做自由的转换,如果随意使用或者转化变量类型,可能导致一些潜在的错误。

上一篇:PHP 基本语法2
下一篇:PHP 运算符4