PHP学习宝典-第六章


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自己会做出决定,以科学符号记数尽量用最极端大小的数值,但这与最初的读取格式无关。

本文作者:



相关阅读:
如何用javascript判断录入的日期是否合法
Linux防火墙该如何设置
针对class、id所做的CSS HACK
关于Aptana Studio生成自动备份文件的解决办法
ext 同步和异步示例代码
如何在linux下使用u盘
建站选择CMS一定要谨慎
浏览器发展/CSS布局/怎样运用?
创造收藏夹中的个性化图标
一个判断email合法性的函数[非正则]
使用PHP编写基于Web的文件管理系统
Js智能判断浏览器是关闭还是刷新的代码
在Win2000环境中管理域名服务器
要 ftp 不要 telnet 如何设?
快速导航
PHP MySQL HTML CSS JavaScript MSSQL AJAX .NET JSP Linux Mac ASP 服务器 SQL jQuery C# C++ java Android IOS oracle MongoDB SQLite wamp 交通频道 作文范文 整村推进项目实施情况汇报 质量月个人工作总结 作文 辅导班那些事儿 描写喷泉的好词好句 泪花的光芒 创新 小学校2010年工作计划 对**县农村货币政策实施效应的调查报告_[实习报告] 泰山作文450字 人际交往中目光接触 【精品】个性发展自我评价 小学五年级作文350字:为谁读书 一场青春的散伙饭 美味季节作文1200字 让人沉醉忘了自我 区建设局2012年上半年城市管理工作总结 一月,迩还我快乐 ╮一个人的街道,一个人的雪景... 小学五年级作文450字:勤劳的华婕 李白——以酒为乐作文700字 晚安心语_周六晚安心语正能量 青春悟 热血洒满了怀抱 订单式人才培养意向书 我的双手——刘铭珏作文450字 故乡导游词 读懂你深沉的爱作文1000字 相伴不相依 迷你鼠 天空为什么是蓝色的作文550字 心情说说:独在异乡为异客 每逢钞票倍思亲 我难过作文300字 2015思修课心得体会 中国“汉”级攻击核潜艇作文900字 我们的学校,真棒!400字 获奖通报怎么写 小品剧本;绝对离婚 小学二年级作文300字:放学了 我又如何去惆怅 心灵撞击 《美女之三国》作文1300字 2013学校团委述职报告 落花倾城·默念 狗的自述800字 傻瓜躲在墙角里哭泣、笨蛋会心疼麽? 党员2010年工作总结 办公室主任年个人总结 高中高二作文1000字:有趣的过浮桥 随笔心境 2015市区物业管理工作情况汇报 马克·吐温的糊涂身世

Copyright © 2016 phpStudy |