PHP中的型别
本章重点
◆ 了解PHP的八种型别…Boolean、
◆ NULL、string、array、object与、resource
◆ 建立、读取、显示输出与操控不同型别的物件
从某种型别转换成其它型别
所有程式设计语言都有某些型别系统,且来指定可出现在程式中的数值种类。这些不同的型别常对应于电脑记忆体中不同层级的表示,在很多情况下程式设计者不用考虑位元的表示方式(或是有足够能力处理)。PHP的型别系统是简单合理,而且很有弹性,它把程式设计者与一些低阶段的细节分隔开来。
在本章中,我们将说明PHP的基本型别(integer、double、Boolean、NULL、string、array、object、 resource),并且讲解如何读取、如何输出显示、如何、指定给变数、如何转换以及怎么组合在一起。在这一章中既是概论也是参考资料,对已是程式设计老手的人可以跳过不看,但只有部份不太熟悉的人可以只阅读前面几节,不管是谁都可以在往后有问题时回不来查找那些当初看起来无关紧要的细节内容。
首要原则:放松自己
PHP使得在键入变数和值时很容易,这是因为它不需在指定娈数和确定型别,另外也是因为它能够处理很多种型别的转换。
变数型别不必先宣告
正如在上章中已经提到的内容,变数的型别不是需要提前宣告,可由程式设计者直接使用运算式指定值,而PHP自己会负责弄清楚在指定的值是什么型别,如下范例:
$first_number=55.5;
$second_number=“Not a number at all”;
型别自动转换
PHP在需要时自动进行型别的转换。与现在大多数的程式语言一样,PHP在进行混合式的数字型别计算时,也都可以执行得很好,例如运算式
$pi=3+0.14159
的结果就会是个倍精度浮点数,在执行加法前,整数「3」就会被暗中先转换成了浮点数。
根据上下文配制型别
PHP在执行自动型别转换时比大多数语言做得更深入,请看看下面的例子
$sub=substr(12345,2,2);
Print(“sub is $sub
”);
Substr函式是设计成以一个字串当成一个输入值,然后传回该字串的某部份子字串,由函式的另两个参数来决定取回子字串的起点和长度。在这个例子中,我们并不是给它传递字串值,而是传递了整数12345,结果会怎样呢?实际上执行并不会有什么问题,浏览器一样会输出
Sub is 34
由于substr希望得到的是字串而不是整数,PHP会自动把数字12345转换成了字串「12345」,然后substr就可以做自己的事情了。
因为这种自动的型别转换特性,PHP很难在型别方面出错,不过实际是PHP程式设计者还是需要小心一些,以确保型别的混合使用不会产生「没什么错误、但却也不是正确结果」的情况。
型别总整理]
PHP只有八种型别…Boolean、string、array、object、NULL和resource。
* integer 数字的整数部份,没有小数点,如495。
* double 倍精度浮点数,类似3.14159或49.0等。
* Boolean 布林型别,只可能出现两种值,TRUE或FALSE(真或非真)。
* NULL 一种特殊型别,其值只有可能为NULL。
* string 字串,是字元序列,类似「PHP4支援字串运算」这类的表示法。
* array 阵列,是对一些已经命名且建立索引之其它值的集合。
* object 物件,由程式设计者定义类别(class)的实例,可包装特定于该类
别的其它型别之值和函式。
* tesource 是一种特殊变数,用来存放参照到PHP外部的资源(例如资料库连线)
请注意Boolean、NULL与resource这些型别是PHP4所增加的型别,PHP3并不适用。
当然前面五种型别属于基本型另别,而接续两种(array与object)属于复合型别,这些复合型别可以用来将任意型别的任意值组成一群变数,但是基本型别却不行。我们在本章只会简短复合型别(array与object),因为它们会在各自所属章节详细介绍。最后,resource类型是PHP设计师不会直接处理的特殊型别,而是透过特殊函式来存取资源或是它们传递给所需要的其他函式。
简单型别
PHP中的简单型别(integer、double、Boolean、NULL和string)对于有程式设计经验的人来说一定很熟悉(虽然我们并非针对熟练的人,但我们还是要详细讲解它们)。唯一会让C语言程式设计者感到吃惊的可能就是PHP的型别怎么少。
大多数程式语言都有几种不同大小的数字型别,较大的数值型别允许值的范围更广,但也会占用更多的记忆体空间。例如,C语言有short型别(用于相对较小的整数),long型别(用于可能很大的整数)和int型别(这是种中间型别,但实际上不是和short就是和long型别相同),它还有不同精确度的浮点数类型,在记忆体使用和功能之间的取拾可能会令你烦恼,但这种型别选择还是很有意义的。PHP设计开发人员帮我们做出了很好的取拾,透过只用两种数字型别简化了这个难题,这两种型别分别对应于C语言中的整数和浮点数型别。
整数型别
Integer是简单的型别,对应于包括正数和负数的简单整数。整数可指定值给变数,或者可用在运算式中,如下所示的例子:
$int_var=12345;
$another_int=-12345+12345;//等于
读取格式
整数实际上可用三种相对于不同基数的方式来读取,十进位(基数为10)、八进位(基数为8)和十六进位(基数为16)。十进位格式是预设值,八进位整数的前置是以「0」来指定的,十六进位的前置为「0x」。任何格式都可以前置「-」符号来命使整数为负数。例如:
$integer_10 = 1000;
$integer_8 = -01000;
$integer_16 = 0x1000;
Print(“integer_10:$integer_10
”);
Print(“integer_8:$integer_8
”);
print(“integer_16:$integer_16
”);
其浏览器输出为:
integer_10: 1000
integer_8: -512
integer_16: 4096
(请注意,读取格式只影响整数被读取时是如何换的,储存在$integer_8中的值并不会记下最初是以8为基数编写的。人、从内部来看,理所当然地这些数字都是以二进位式表示的,而在最的输出是以10为基数的转换结果,因为这是预设列印的,另外它也会把 int变数合并进字串的预设置)。
范围
整数可以多大(或多小)呢?因为PHP整数是对应于C的long型别,而该类型取决于你使用机器系统上的字的长度,所以很难明确地回答这个问题。不过在大多数常见系统一台上,最大的整数是「231-1」(或2,147,483,647),最小(负)整数是「-(231-1)」(或- 2,147,483,647)。
就我们所知,目前没有能指出完成式中最大整数的PHP常数(类似C语言中的MAXINT),如果有疑问,请参见本章最后面的补充内容,如果你真的有需要使用非常大的整数,PHP是有一些专精度(arbitrary-precision)函式,请参阅第十二章关于「BC」该节。
double型别
double是倍精度浮点数,例如
$first_double = 123.456;
$second_double = 0.456;
$seven_double = 2.0 ;
请注意$even_double是个「四舍五入取整数(round)」的数字,但并不表示它是个整数型别。整数型别和倍精度型虽数是以不同的基楚格式储存的,例如下列运算式:
$five = $even_double+3;
的结果的个倍精度型别数,而不是个整数型别,即使它列出的结果是「5」。然而,在所有情况下,都可以自由地在数学运算式中混合使用倍精度浮点数和整数,让PHP自己来选型别来处理。
在预设情况下,列出倍精度数字时采用了所需的最少的小数位数,例如,程式码,
$many = 2.2888800;
$many_2 = 2.2111200;
$few = $many + $many_2;
Print(“$many + $many_2 = $few
”);
在浏览器中产生下面的输出:
2.28888 + 2.21112 = 4.5
如果需要更精确地控制输出显示结果,可参阅第十章的printf函式
读取格式
倍精度浮点数的典型取格式是「-X.Y」,其中「-」是选择性的,用来指定负数,X和Y 是0-9之间的数字序列。X部份可以省略(如果数字在-1.0至1.0之间),Y部份也可以省略(没有小数点)。前置的工结尾的0都可忽略,下面皆为有效果的倍精度浮点数例子:
$small_positive = 0.12345;
$small_negative = -.12345
$even_double = 2.00000;
$still_double = 2.;
另外,倍业精长数度可按科学符号记数法来指定,在前面格式尾端添加字母e和想在的10的整数乘幕,例如,「2.2e-3」将对应于「2.2x10-3」。数字的浮点数部份不需要严格限制在1.0和10.0之间的范围。下面所有范围例程式码行皆为有效:
$small_positive=5.6-3;
Ptint(“small_positive is $small_postive
”);
$large_positive=2.8e+16;
Ptint(“large_positive is $large_postive
”);
$small_negative = -2222e-10;
Ptint(“small_negative is $small_negative
”);
$large_negative=-0.00189e6;
Ptint(“large_negative is $large_negative
”);
他在们在浏览器的输出为:
small_positive is 0.0055
larger_positive is 2.8e+16
sall_negative is -2.222e-07
large_negative is -1890
请注意,与八进位和十六进位整数一样,一旦PHP结束了读取数字的过程,读取格式就与前面的变数不相干了,它不会记得最初是用科学符号记数法指定的,输出列印值的时候,PHP自己会做出决定,以科学符号记数尽量用最极端大小的数值,但这与最初的读取格式无关。
以上就是PHP学习宝典-第六章的内容,更多相关内容请关注PHP中文网(www.gxlcms.com)!