|
第三章 PHP中的数据处理 This is an HTML paragraph. This is an HTML paragraph.
本章着重讲述PHP程序的内部数据,包括数字,变量和常量。程序中的数据由操作符来控制的,操作符告诉PHP对内部数据进行什么操作(如加、减等等)。PHP程序的外部数据包括文本文件和数据库,对外部数据的详细介绍请参考第六章“数据库和SQL”
当程序运行时数值不会改变,这是因为这些数值在源代码中已经准确表示了它们该是什么值。而大多数时候,在程序运行时却需要改变某些数值,为此,必须留出一部分计算机的存储空间来保存可变化的数值。而且必须随时留意这些小存储单元的位置,以便程序能在需要时能找到它们。像所有计算机语言一样,PHP使用变量来监视计算机存储器的使用情况,每当需要存储一条新的消息时,就可以将它置成一个变量。常量指的是赋予一个名称的数值,最典型的一个常量例子就是数学值:π(pi)。
本章讲述了在PHP中如何使用数值、变量和常量。首先,我们先来讨论数值。
3.1 数值
数值常表示为“等于”或实际代码的形式,比如,在源代码程序中看到像12.5这样的数值时,它指的是十二点五,而不是指“1”,“2”,“.”,“5”这四个字符。可以用同样方式来表示文本,比如,“Rolf D"Barno”(注意双引号)表示由十二个字符组成的字符串。因为这十二个字符用双引号括了起来,因此,它们只能是一个字符串数值。
PHP使用两种类型的数值:
.数字 -- 最基本的数据类型。
.文本 -- 作为一个单元进行处理的一串字符。
3.1.1 数字
在PHP中最常使用的是数字,它通常代表为了完成某项任务而需要执行的程序所要用到的一个数值。我们最常使用的是十进制数,但在PHP中也可以使用八进制和十六进制。
在遇到很大的或很小的数字的时候,就会发现科学表达式是十分有用的了。在高中时我所学的数学知识差不多都快忘光了,只有对科学表达式牢记不忘,这大概是因为我比较喜欢移动小数点的缘故。科学表达式10.23E+4,等于102,300。也可以在科学表达式中用减号表示比较小的数,比如,10.23E-4等于.001023。简单地说,如果指数为正数的话,就将小数点向右移动,如果指数为负数,则将小数点向左移动。
注意:对于那些对非十进制不熟悉的人来说,这里有一个简单的解释。
十进制的基数为十。当看到值15时,它表示(1*10)+5或1510。下方的值代表基数。
八进制的基数为八。当看到值15时,它表示(1*8)+5或1310。
十六进制的基数为十六。当看到值15时,它表示(1*16)+5或2110。当基数为十六时,除了0到9外,还需要6个字符,以便能占满十六个值的每一个位置。字母A-F常用来表示11-16。因此,值BD16等于(B16*16)+D16或(1110*16)+1310,即17610。
让我们来看一看在程序中会用到的几种不同类型的数字。首先先来看整数。
* 123--十进制整数。
* 043--八进制整数,数字前缀0表示八进制数。
* 0x23--十六进制整数,数字前缀“0x”表示十六进制数。
有小数部分的数叫做浮点数。简略地讲,经常见到的那些数值指的都是浮点数。
* 100.5--有一位小数的一个浮点数,也可以称为一百又十分之五。
* 54.534--有三位小数的一个浮点数,也可以称为五十四又一千分之五百三十四。
* .000034--非常小的一个浮点数,也可以用科学表达式3.4E-5表示。
整数没有小数部分,浮点数有小数部分。
3.1.2 文本
文本是一组由引号括起来的字符,因而能被当为单个数据来使用。实际上,PHP对引号的要求并不严格,没有用引号括起来的单个词也可以用来表示字符串,但是为了避免混淆,请不要这样做。由于文本值包含有一系列字符,所以文本值通常称为字符串。它们在程序中常用于表示确定文件名、显示消息、输入提示等。PHP严格区分单引号(')、双引号(")和反引号(`)的作用。
文本也常称为字符串。
单引号字符串:
单引号字符串相当容易理解,只需要用单引号把想使用的文本括起来即可。例如:
'Men at Arms by Terry Pratchett'
'
单引号字符串是用单括号(')括起来的文本。
注意:读过本章后面的内容“变量替换”之后,单引号的真正作用才能表现出来。
如果需要在单引号内部再次使用单引号,事情就会变得有些麻烦。例如,下面的语句不能正常工作,这是由于第二个引号已经结束了所表示字符串。
'Terry's book is highly enjoyable.'
这个典型的错误即是语法(或分析)错误,PHP编译器不知道如何处理第二个单引号以后的文本。以下是正确的表示方式:
'Terry\'s book is highly enjoyable.'
反斜杠(\)字符串表示单引号的功能--结束文本值--将会被忽略。
提示:反斜杠字符也被称为转义字符,这也许是由于它使它后面的字符从常用含义中脱离出来的缘故。
有关单引号字符串的另一个更重要的要点是--如果需要在单引号字符串中换行,只要简单地在源代码中键入换行键即可。清单3.1显示了如何这样做。
清单3.1 line_breaks.php3--在输入行中加入换行即可开始新行
echo 'First Paragraph: <br> <br> Corporal Carrot, Ankh-Morpork City Guard <br> (Night Watch), sat down in his nightshirt <br> took up his pencil, sucked the end for a <br> moment, and then wrote:
?>
如果读者不熟悉HTML语言的话,请阅读一到两本HTML教学指南。在本书以后的章节中必须熟悉HTML语言。
Page 35, 图 3。1
图 3.1 可以通过 Web浏览器看到在代码中加入的换行
在图3.1中可以看到用单引号括起来的,甚至在代码中包含换行的字符串的一部分。
双引号字符串:
双引号字符串类似于单引号字符串,但是双引号字符串更复杂一点。在双引号字符串中可以使用反斜杠在字符串中加入转义序列和转换字符。也可以使用变量替换,但是现在还不打算过早涉及有关变量替换方面的问题,这个主题留到以后再仔细讨论。
双引号字符串是由双引号(")括起来的字符串。
基本的双引号字符串是一系列由双引号(")括起来的字符,如果需要在字符串中使用双引号,可以使用反斜杠字符。例如:
"Men at Arms by Terry Pratchett"
"
"Terry's book is highly enjoyable. "
"John said,\"Gifts are great.\""
注意在最后一行中的反斜杠用来使双引号的功能改变,如果不使用反斜杠字符,也可以使用单引号。双引号字符串和单引号字符串的一个较大的不同之处是,双引号字符串可以在字符串中加入特殊的转义序列。表3.1显示了PHP可以理解的转义序列。
表3.1 转义序列
转义序列 描述
\n 换行
\r 回车
\t 制表符
\$ 美圆符号
\0nnn 任一个八进制数
\xnn 任一个十六进制数
\\ 反斜杠字符
提示:在下一节“变量”中,就可以知道在使用$字符时,为什么需要使用反斜杠。
你也许对\0nnn和\xnn比较陌生,请看下面的例子:
"Peter was \067 years old yesterday."
"Peter was \0x39 years old yesterday. "
以上的文本都表示彼得 9岁了,八进制和十六进制序列都表示彼得的岁数9这个字符的ASCII代码。ASCII代码的清单详见附录B。
反引号字符串:
对于反引号字符串是否是真正的文本还存在争论,这是因为PHP使用反引号字符串来运行系统命令。当PHP看到反引号字符串时,它将字符串数值传递给Windows、UNIX或者用户使用的其他类型操作系统。清单3.2显示了这个过程是如何完成的,图3.2显示在Web浏览器窗口中的系统命令输出结果。
反引号字符串使用反引号(`)括起来。
清单3.2 back_quoted_string.php3--使用反引号字符串执行命令
echo ''; <br> echo `ls *.php3`; <br> echo '
?>
Page 37 图3.2
图3.2在Web浏览器中显示的系统命令所显示的文本
在双引号字符串使用的转义序列也能在反引号字符串中使用。
3.2 变量
数字仅能解决用来程序当中的内部数据的一部分问题。当需要保存数据值,并在运行程序时需要进行改变的时候,就需要用到变量。PHP有三种类型的变量:
标量 -- 一次保存一个特定数字或字符串。我通常用scl_作为标量名的起始字符。如果该变量只保存一种类型的值时,我将在其名字前使用int_或str_前缀。
数组 -- 存储数值的列表。这些数值可能是数字、字符串或是另一个数组。我通常用arr_作为数组变量的起始字符。
对象 -- 存储变量信息和函数。更详细的信息请参看第十章“面向对象”。我通常用obj_作为对象变量的起始字符。
提示:推荐对不同类型的数据使用可区分的变量名,除非有更好的理由。如果需要使用同一个名字的时候,可以尝试使用名字的复数作为数组变量名。例如,使用 $name作为标量名,并使用$names作为数组变量名。这将在以后的编程中避免一些混乱。
注意:在PHP中的变量名是区分大小写的。这意味着$scl_varname、$scl_Valname、$scl_varName和$scl_VARNAME都代表不同的变量。
在本章下面的部分将分别讨论每一种变量类型。你将读到如何命名变量、设置它的值、以及它们的一些用处。
3.2.1 标量
标量常用来跟踪单个信息。例如,客户的名字或出售的数量。只要标量名以$为第一个字符,第二个字符是字母或下划线,就可以使用任一个可以从名字想象出是什么东西的名字作为标量名。
提示:如果曾经使用Visual Basic