本章重点
◆ 了解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设计