配色: 字号:
零基础学习PHP-从零开始学习PHP-PHP基础教程-PHP简明教程
2012-02-20 | 阅:  转:  |  分享 
  
和定义,数据单元用标签

定义。

8.列表元素:说明:HTML的列表分为无序列表和有序列表。

9.表单元素:HTML表单是一个包含表单元素的区域,表单元素一般会作为数据,提交

给后台服务器做处理。表单域用标签和定义。表单元素是那些定义在表单域

里,可以输入信息的元素,如文本框、单选按钮、下拉列表等。

1.4.5创建HTML文档

使用任何一款文本编辑器,都可以编辑HTML文档。编辑好的HTML文档,按后缀名.html

或htm保存,最后通过浏览器访问HTML文档。打开一个文本编辑器,键入如下HTML代码

(代码1-15),

1.4.6创建HTML列表

HTML最基本的列表有两种:无序列表和有序列表,列表可以嵌套使用,亦可同时使用。

创建无序列表,通过设置
    标签的type属性,可以更改列表项的标志。type属性的取值

    可以是disc,square或circle中的任意一个。

    创建有序列表,通过设置标签
      的type属性,可以为有序列表的列表项设置不同的

      顺序标志。

      对于无序列表来说,

      1.4.7创建页面表格

      标签
PHP起步



欢迎来到PHP的世界!

PHP语言是最受欢迎的Web开发语言之一。它以学习简单、开发快速、性能稳定而倍

受Web开发人员的青睐。PHP不仅使用人员众多、数以万计的Web站点用它构建,而且有

强大的社区支持,使得无论是用PHP开发Web应用,还是学习PHP语言,都会快速有效、

事半功倍。在各种Web开发语言、框架、概念纷扰的今天,PHP仍以其独特魅力吸引更多

的Web开发人员学习和使用。

选择PHP,没错的!

1.1初识PHP

PHP是一种服务器端的、嵌入HTML的脚本语言。它的语法结构和C语言极为相似。为

了能够快速地编写动态Web页面,PHP还加入了自己的某些语言特征,这些特征都非常容

易理解和使用。先来看一个嵌入有PHP代码的HTML文档。



Welcome




echo"WelcometoPHP''sworld!";

?>





1.2LAMP——锋利四剑客:Linux、Apache、MySQL和PHP

要想学习PHP,就有必要了解和PHP关系密切的其他3种技术:Linux操作系统、Apache

网络服务器和MySQL数据库。

LAMP这个名词最早由MichaelKunze创造,用来代表Linux操作系统、Apache网络服务

器、MySQL数据库和PHP(如果可以,Perl和Python也是不错的选择),LAMP正是这4种

技术的首字母。

PHP作为强有力的Web开发语言,和Linux、Apache、MySQL的支持是密不可分的。它

们都是开源软件,并且有强有力的社区支持,它们的完美组合构成了当今Web开发世界中

不可忽视的一极重要力量。而且,这支力量近年一直在不断地变得更加强大。虽然,这4

种技术并不是专门被设计成在一起工作的,但多年来,这些软件之间的兼容性不断完善,不

仅完改善了个组件之间的协作,扩展出更多的功能,而且在目前几乎所有的Linux版本中都

默认包含了这些产品,使得这些产品共同组成了一个强大的Web应用平台。

1.3PHPWeb编程的体系结构和基本内容

概括地说,任何Web编程体系,无外乎服务器端和客户端的程序开发。基于PHP的

Web应用开发也不例外,其中客户端的开发包括使用HTML设计Web页面,使用样式表控

制Web页面的显示效果,还需要客户端的脚本语言来控制浏览器的特效、验证HTML表单

数据等,这些脚本语言包括JavaScript、VBScript等。服务器端的开发就需要掌握PHP语言

和MySQL数据库的有关内容。

本节的各小节将对这些内容做简要说明,之后的各节将较为详细地介绍HTML、样式表

和JavaScript,它们都是Web开发的基础内容,对这些内容不了解的PHP初学者有必要掌握。

1.3.1了解PHP、HTML、层叠样式表(CSS)和JavaScript及其关系

作为服务器端的脚本语言,PHP多数情况下都是和HTML相互搭配来使用的。PHP用来

完成和逻辑有关的动态内容。PHP程序执行的输出结果,通过HTML文档表现给用户。一般

情况下,在HTML页面中需要输出数据的地方内嵌入PHP代码,这个页面也就成为了PHP

程序。

在创建HTML页面时,都要考虑页面设计。如页面布局、页面颜色、字体、边距空白等。

这些设置可以单独在页面中进行,但那样会使HTML页面变得臃肿,也不便于将来的维护。

层叠样式表解决了这些问题,它允许页面设计人员在层叠样式表(即CSS)文件里设定页面

表现效果,如字体大小、边距控制等。CSS使得HTML页面的表现更加丰富、美观,也更加

容易维护。

1.3.2HTML文档

HTML文档就是使用HTML标记语言创建的文档。通过浏览器浏览的网页,几乎都是

HTML文档,或者是由服务器端程序生成的HTML文档。下面就是一个HTML文档的代码。



HTML文档示例



HTML语言



FirstWebPage







1.3.3使用样式表实现页面效果

按照HTML的设计初衷,文档的内容、结构与格式是分离开来的。如果过多地在HTML

文档中控制页面的显示效果,会使HTML文档的维护越来越难以维护,也违背了HTML的设

计初衷。为了解决这个问题,引入了样式表的概念。一个简单的样式表如下所示。

说明:样式表负责控制页面的格式和显示效果,HTML文档负责控制结构和显示内容。

p{

font-size:10pt;

}

这个样式表定义的含义是,HTML文档中所有用

标签定义的内容,都将使用10pt大

小的字体显示。关于样式表语法和如何使用样式表,将在后面做讲述。

1.3.4客户端的响应

Web页面作为客户端,有时需要直接对用户的请求作出响应。这主要是通过客户端脚

本来实现,这些脚本语言包括JavaScript等。

可以在HTML页面中加入JavaScript脚本,这些脚本可以直接在浏览器里执行。这样,

就可以达到在客户端响应用户请求的需求。一般这样的响应主要是验证表单数据、用户操作

提示等。

本书将在1.6节介绍JavaScript。

1.3.5嵌入式脚本页面

PHP代码一般都是嵌入在HTML文档当中,通过服务器解释这些PHP代码,并用代码执

行产生的结果替换PHP代码内容,最后返回给用户的是内嵌代码执行后的HTML文档。例如

内嵌生成“HelloWorld”的HTML页面代码如下:





HTML-PHP











1.4Web编程的基础知识之一:HTML

HTML是创建Web应用的最基本内容,无论是动态还是静态页面,最终都要产生HTML

文档。所有的Web开发都要涉及到用HTML设计Web页面。本节将介绍HTML语言及如何

使用HTML创建Web页面。

1.4.1HTTP协议简介

网络上的计算机之间要进行通信,就必须遵守一定的规则,这种通信规则就是网络协议。

协议保证网络上各种不同的计算机之间能够理解彼此传递的消息,好比操不同语言的人们之

间,通过翻译来理解对方所说话的含义一样。现在应用最广的Internet使用的是TCP/IP协议,

而浏览WWW使用的是HTTP协议,即超文本传输协议(HyperTextTransferProtocol),此协

议建立在TCP/IP协议之上。

浏览网页的过程,其实就是一系列请求/响应的过程。HTTP协议定义了这个请求/响应

过程中请求和响应的格式,及维护HTTP链接的内容。

1.4.2HTML基本知识:标签

HTML的全称是HyperTextMarkupLanguage,即超文本标记语言。它是一种简单、通用

的标记语言。之所以叫标记语言,是因为,HTML通过不同的标签,来标记文档的不同部分。

读者看到的每个Web页面,都是由HTML通过一系列定义好的标签生成的。

从简单的文本编辑器,如Windows的记事本,到专业化的编辑工具,如Dreamveaver,都可

以用来编辑HTML文档,编辑好的HTML文档必须按后缀.html或.htm来保存,最后,通过

浏览器打开HTML文档,来查看页面效果。

在HTML文档中,标签是包含在“<”和“>”之间的部分,如

就是一个标签。标签

一般是成对使用的,如同时使用,其中是开始标签,是结束标签。HTML

的标签不区分大小写,因此表示的含义相同。

1.4.3HTML基本知识:元素

HTML元素由标签定义,标签所定义的内容就叫“元素”,元素包含在开始标签和结束

标签之间。

每一种HTML元素,一般都会有一个或数个属性,属性用来设置或表示元素的一些特性、

名称或显示效果等。属性放在元素标签中,紧跟标签名称之后,它和标签名称之间有一个或

数个空格。元素的每个属性都有一个值,属性的值的设定使用“属性=”值””的格式,可以

为属性的‘值’加上引号或不加引号。下面的HTML代码为标签

设置了name属性,

其值为login,表示这个表单的名称为login。



1.4.4HTML基本知识:HTML的基本元素

元素是组成HTML文档的关键,本节介绍HTML常用的几种基本元素。

1.标头元素:HTML使用标签定义一个标头,结束标签是。

2.标题元素:这里的标题,是指HTML文档中,内容的标题。标题元素由标签



定义。

3.段落元素:HTML中使用标签

定义一个段落。

4.字形元素:使用标签定义一个粗体字形元素

5.链接:HTML文档中指向其他Web资源,如另一个HTML页面、图片等的链接被称为

“锚”。在HTML中使用标签定义一个锚元素,即链接元素,也就是说在

之间的内容,会成为一个超链接。

6.图像元素:使用标签定义一个图片元素,在标签中使用属性src来指向一个图片

资源,象这样,其中url是指向资源所在位置。这个位置可以是一个URL,

也可以是一个相对地址,

7.表格元素:使用标签和
定义一个表格元素。一个表格由“行”构成,

每一行由数据单元构成。表格的“行”用标签
用来创建一个表格。标签主要的常用属性有width、align

和border。

width属性:设置表格的宽度,如下所示。这里定义一个宽度为600px(600点像素)

的表格。



align属性,设置表格相对于浏览器区域的对其方式,可以选取的值有:left(居左)、center

(居中)或right(居右)。

border,设置表格的边框宽度,单位为像素。

1.4.8建立页面表单

使用标签
和创建一个表单。
的主要属性是action和method。

action属性:用来指定表单数据被提交后,处理这些数据的程序的地址。如下HTML代码,

表示当表单提交后,表单的数据将被传到文件login.php,由login.php来处理传入的数据。



method属性:指定用何种HTTP方式传递数据。

有两种传递数据的方式:POST方式和GET方式。POST方式将表单数据放在HTTP数据

的正文部分传递。GET方式将表单数据加到action所指的地址之后传递。

1.5Web编程的基础知识之二:层叠样式表(CSS)简介

层叠样式表的英文全称是CascadingStyleSheet(简称CSS)。HTML最初设计时,只是用

来定义文档的内容。比如标签
就是用来定义一个HTML文档的表格。页面的布局由浏

览器显示,并不由HTML标签控制。

随着一个站点HTML文件的越来越多,如果用仍HTML标签排版和控制页面显示效果,

它的局限性和困难性的问题会日益突出。甚至,在标签无法满足页面显示效果时,有的设计

人员又加入JavaScript来控制页面效果。可以想象,这样HTML文档会变得越发臃肿,并且

越来越难以维护。

层叠样式表(CSS)的出现解决了这个问题,即使用CSS决定网页内容如何显示,用CSS

控制页面显示效果。

1.5.1样式表的基本语法

一个样式(Style)的语法由3部分构成:Selector(选择器),属性(Property),属性值(Value)。

格式如下:

selector{property:value}

例如下面的例子,p就是selector,color就是属性,blue就是属性值。

p{color:blue}

其中p就是指p标签

,这个样式(Style)的含义表示凡是用

标签标记的文档内

容,其文本颜色显示为蓝色。HTML中所有的标签都可以作为selector。

如果想为Style添加多个属性,可以在两个属性之间用分号分隔。下面的Style就包含两

个属性,一个是对齐方式,其值为居中,一个字体颜色,其值为红色,它们之间用分号分隔

开。

p{text-align:center;color:red}

1.5.2设置页面字体格式

使用CSS可以设置字体的名称、大小、显示风格等样式。

1.字体名称属性:font-family(用这个属性设定字体的名称,如Arial,Tahoma,Courier

等。)

2.字体大小属性:font-size(font-size属性用来设定字体的大小,字体大小的单位有多

种,常见的是pt和px。)

3.字体风格属性:font-style(这个属性有3个值可选:normal(正常显示)、italic(斜

体显示)、oblique(斜体显示)。normal是缺省值。)

1.5.3设置页面颜色和背景

使用CSS背景颜色属性和背景图片属性,可以很方便地设置Web页面的颜色和背景。

1.背景颜色属性:background-color(此属性为HTML元素设定背景颜色,示例代码如

下。)

body{background-color:#99FF00;}(上面的代码表示body这个HTML元素的背景颜色值是

#99FF00。)

2.背景图片属性:background-image(此属性为HTML元素设定背景图片)



1.5.4处理页面的边距和填充

边距属性是用来设置页面中一个元素所占空间的边缘到相邻元素之间的距离。

左边距属性:margin-left:这个属性用来设定左边距的宽度。示例代码如下。

.d1{margin-left:1cm}

右边距属性:margin-right:这个属性用来设定右边距的宽度。示例代码如下。

.d1{margin-right:1cm}

上边距属性:margin-top:这个属性用来设定上边距的宽度。示例代码如下。

.d1{margin-top:1cm}

下边距属性:margin-bottom:这个属性用来设定左边距的宽度。示例代码如下。

.d1{margin-bottom:1cm}

边距属性:margin:这个属性是设定边距宽度的一个快捷的综合写法,用这个属性可以

同时设定上下左右边距属性。还可以为上下左右边距设置相同的宽度。示例代码如下。

.d1{margin:1cm}

1.5.5理解HTML层的概念

HTML中,使用标签

来定义一个层,通过CSS指定不同的属性值,可以定

位层,从而实现页面的布局。

利用层可以非常灵活地放置内容,例如可以将层前后放置、隐藏某些层而显示其他层、

在屏幕上移动层等。可以在一个层中放置背景图像,然后在该层的前面放置第二个层,从而

包含带有透明背景的文本。通常,可以把层看成一个容器,在层里可以放置其他更多的HTML

元素。

1.5.6按Web标准建立网页

传统HMTL布局,一般都是使用表格。表格定位比较简单快捷,但容易出现表格嵌套表

格的现象,这样对页面的后期维护很不方便,而且表格越多,越会影响到浏览器解析HTML

文档的速度,使页面打开的速度变慢。如今,页面设计人员更多地使用HTML层和CSS,用

于Web页面的布局。

所谓的Web标准,其实并没有统一的标准。不过,它似乎朝着使用
和CSS进行页

面布局的方向行进。DIV+CSS只是具体的实现技术手段,并不能涵盖web标准。web标准不

仅仅是布局的问题,更重要的是信息结构清晰、内容与表现相分离,而DIV+CSS技术能较好

的实现这种思想。因此,当前看到的多数符合标准的页面都是采用DIV+CSS制作。

1.5.7在网页中引入样式表

最常用的样式表引入方式有:内嵌样式(InlineStyle)、内部样式表(InternalStyleSheet)

和外部样式表(ExternalStyleSheet)。

内嵌样式:内嵌样式是写在标签里面的。内嵌样式只对所在的标签有效。如下代码所示。

用Style定义字体



这里在

标签内增加样式:style="font-size:20pt;color:red,这个样式只对当前

标签

有效。

内部样式:内部样式表是写在HTML的里面的。内部样式表只对所在的

网页有效。

外部样式:外部样式是指,将样式(Styles)写在一个以.css为后缀的CSS文件里,然后在

每个需要用到这些样式(Styles)的网页里引用这个CSS文件。

1.6Web编程的基础知识之三:JavaScript基础

JavaScript是一种基于对象和事件驱动并具有安全性能的脚本语言,它是Web页面设计

的重要组成部分,它被嵌入在HTML文档中,由浏览器解释执行。可以使用JavaScript设计

出更有效果的Web页面、验证Web页面表单数据、创建cookie等。

1.6.1网页中的JavaScript

JavaScript可以出现在HTML文档的任何地方,但必须包含在“
language="JavaScript">”和“”之间。一般情况下,使用“

和“”包含的JavaScript代码。

1.6.2JavaScript的变量

JavaScript变量是用来存储数据的地方。这样在需要用这个值的地方就可以用变量来代

表,一个变量可以是一个数字、文本等。JavaScript变量的命名区分大小写,例如,名为

computer的变量和名为Computer的是不一样的。而且,变量名必须以字母或下划线开头。

JavaScript是一种对变量的数据类型要求不太严格的语言,所以不必声明每一个变量的

类型,但在使用变量之前先进行声明是一种好习惯。在JavaScript中用var语句声明一个变

量,象下面这样:

varname=value

1.6.3JavaScript的基本语句

这一小节仅介绍JavaScript的几种常用的基本语句,它们是:

if?else条件语句。

switch选择语句。

for循环语句。

while循环语句。

1.6.4使用简单的对话框

通常会使用JavaScript在网页上产生弹出对话框的效果。用JavaScript可以创建的对话框

主要有以下所示的两种。

警告对话框。

确认对话框。

下面将通过实例代码,来了解如何使用JavaScript创建这些对话框。使用函数alert()创

建警告对话框,它的语法格式如下所示。

alert(“message”)

1.6.5JavaScript的基本事件

所谓事件,是指用户与Web页面交互时产生的各种操作,例如单击Web页面上的超链

接或按钮时,就产生一个单击(click)事件(event)。浏览器为了响应某个事件而进行的处

理过程,叫做事件处理。

注意:浏览器在程序运行的大部分时间都等待事件的发生,事件能够被Web页面中的

JavaScript捕捉到,并在事件发生时,自动调用JavaScript的事件处理函数,完成事件处理。

除此之外,浏览器自己的一些动作也可以产生事件,例如,当浏览器载入一个Web页

面时,就会发生载入(load)事件,卸载一个页面时,就会发生卸载(unload)事件。本小

节将介绍几种常见的JavaScript事件,它们是以下所示的3种。

鼠标单击事件(onClick):当用户单击Web页面上的超链接或者按钮时,就会触发onClick

事件。

页面载入和卸载事件(onload和onUnload):onload事件发生在Web页面完全下载完

成后。onUnload事件发生在用户离开(即关闭)当前Web页面时。onload事件通常用来检

测浏览器的一些信息,如浏览器类型、版本等。它们也可以用来处理用户cookie。

提交事件(onSubmit):该事件发生在页面表单的“提交”按钮按下并放开之后。通常

使用该事件的处理过程验证表单数据的有效性。

1.6.6JavaScript的函数

函数是一个可以完成特定功能可执行的代码块,它由一条或多条JavaScript语句组成。

通常将那些会反复使用,或者用来完成某种功能的代码写成函数,以便利于代码的重用。

JavaScript中函数的语法如下所示。

functionname(var_1,var_2,...,var_n)

{

statement

}

1.6.7JavaScript的对象

JavaScript是一种面向对象的编程语言。一段文字、一个图片、一个表单都可以看作是

一个对象,每个对象都有自己的属性、方法和事件。属性表示了该对象的某些特征,如字符

串的长度、文本框里的文字等。方法可以理解成该对象可以处理的一些事情。

JavaScipt提供了很多对象,这些对象可以直接在JavaScript里使用。本小节介绍JavaScript

的一些常用的基本对象。

1.String对象

String对象代表一个字符串,定义该对象的最简单办法就是直接赋值。如下代码所示。

此时,变量str就是一个String对象,它的值是“HelloJavaScript”。

varstr=“HelloJavaScript”

2.日期对象——Date

顾名思义,日期对象就是用来处理时间的JavaScript对象。要定义一个日期对象,需要

使用new运算符,如下代码所示。

varsome_date=newDate()

3.数组对象——Array

数组对象用来存放一组数据(或者说是对象),这些数据可以是不同类型的。数组中的

每个对象都有一个“下标”,用来表示它在数组中的位置。数组的下标从0开始算起,所以,

第一个对象的位置是0,第二个对象的位置是1,以此类推。JavaScript中定义一个数组的方

法如下代码所示。

varmy_arr=newArray()

4.window对象

该对象表示的是一个浏览器窗口。引用该对象的方法或属性时,不需要使用

“window.xxx”这种形式,而是直接使用该对象的方法或属性。该对象常见的属性如下所示。

name:当前窗口的名称。states:表示浏览器窗口下方状态栏所显示的内容。通过对

改属性发赋值,可以改变浏览器状态栏显示的内容。self:指浏览器窗口本身。history:

浏览器历史访问对象。

location:浏览器地址对象。document:文档对象。window对象常见的方法如下所

示。

open():打开一个窗口。close():关闭一个已打开的窗口。alert():弹出一个包含“确

定”和“取消”按钮的对话框。该方法已经在前面介绍过。

5.document对象

document对象代表浏览器窗口内的文档。该对象包含了整个HTML文档,并且可以访

问当前页面中的所有元素。该对象最常用的方法就是write,它向当前HTML文档写入数据。

前面的内容已多次使用过该方法,这里不再重复举例。document有一个重要属性:cookie。

接下来的一小节,就向读者介绍JavaScript中的cookie。

1.6.8JavaScript中的cookie

cookie是指当用户访问某一个Web站点时,由服务器存储在客户端计算机中的一些变

量。它通常用来区别不同的访问用户。当同一台计算机请求访问某个页面时,浏览器也会将

cookie发送给服务器。

cookie一般是这样的形式:cookie名称=cookie值。cookie的名字一般使用字母和数字

命名,cookie的值要求是可以用URL编码的字符。所有的cookie都有一个失效期,过了失

效期,计算机就会将这个cookie删除。JavaScript中通常使用document的cookie属性存储

cookie。它的用法如下所示。

document.cookie=''cookieName=''+escape(''cookieValue'')+'';expires=''+

expirationDateObj.toGMTString();

1.7开始PHP之旅:搭建PHP开发环境

从这节开始,正式进入和PHP有关的内容。本节将介绍Apache、MySQL和PHP的下载、

安装及配置,分别讲述在WindowsXP和Linux/UNIX下开发环境的搭建。为了便于初学者理

解和掌握,本书将按Windows操作系统下的开发环境讲述PHP语言及其编程。

1.7.1下载Apache、MySQL和PHP

Apache、MySQL和PHP都是开源产品,均可从其官方网站下载,并且可以免费使用。

1.Apache的下载

Apache服务器的官方网站是http://httpd.apache.org

当前,可以通过镜像地址http://apache.mirror.phpchina.com/httpd/binaries/win32/

下载Windows的Apache安装程序,这个镜像地址列有各个版本的Apache安装程序,

2.MySQL的下载

MySQL的官方网站是http://www.mysql.com

可以通过http://dev.mysql.com/downloads/mysql/5.0.html

下载最新版本的MySQL,

3.PHP的下载

PHP的官方网站是http://www.php.net

可以通过http://www.php.net/downloads.php

下载最新的PHP版本。对于Windows系统,可以下载安装版本或者PHP压缩包文件,

1.7.2在Windows下配置开发环境

下载完需要的软件后,本节介绍如何实现这些软件的安装和配置。

1.Apache的安装

2.PHP的安装

3.配置开发环境

1.7.3在Linux/UNIX下配置开发环境

因为在Linux/UNIX下配置PHP的开发环境,对读者的技术要求稍微高一些,而且涉及

到一些Linux/UNIX方面的基础知识,如命令的使用、程序编译等,考虑到便于初学者学习

和掌握,本节讲述比较简略。另外,本书主要以Windows为平台讲述PHP语言及其开发,

因此初学者也可以跳过本节的学习。

1.MySQL的安装

2.安装Apache

3.PHP的安装

1.7.4善其事利其器——PHP编辑器的选择

毋容置疑,开发人员需要一个功能强大的IDE(ItegratedDevelopmentEnviroment,集成

开发环境),就好似一个好的猎人,需要一支好的猎枪一样。使用PHP做Web应用的开发,

无论是从开发人员的需求上考虑,还是项目的开发效率上考虑,都需要有一个功能强大而且

易用的编辑器做支持。如今有许多编辑器可供PHP开发人员选择,它们各有优点,开发人

员可以根据自己的需求、使用习惯等方面选择这些编辑器,将它们作为编写代码、开发程序

的高效工具。

本节将简单介绍三款常用也是比较受开发人员欢迎的PHP编辑器,希望对初学者有所

帮助。这三款编辑器是:UltraEdit、Eclipse和ZendStdio。

1.8立竿见影

经过上几节的讲述,配置好了PHP的开发环境。从现在开始,通过一些小例子体验一

下PHP,看看PHP是怎样一种计算机程序语言,简单了解一下用PHP能做哪些事。从向PHP

问好开始,向它说声“Hello,PHP!”!

1.8.1编写第一个PHP程序——“Hello,PHP!”

打开最上手的编辑器,来编写第一个PHP程序。这个PHP程序非常简单,

在编辑器键入以上代码后,按文件名hello.php保存在Apache安装目录的htdocs目录

下。然后打开浏览器,键入地址:http://localhost/hello.php,如果一切正确无误的话,将会

看到浏览器显示出“Hello,PHP!”字样,

1.8.2使用PHP处理HTML表单

这一小节介绍如何使用PHP处理HTML表单数据。在这小节,将编写一个PHP程序,

试着用它处理HTML文档提交的数据。

1.9深入了解Apache、PHP和MySQL

在正式学习PHP语言之前,还需要对Apache、PHP配置和MySQL的有关方面做一些比

较深入的说明,这样即有助于读者对前几节知识加深认识,也有助于读者学习和理解后续内

容。以下几小节的内容,主要将以Windows平台下的配置做讲解,Linux/UNIX平台下的情

形类似。

1.9.1Apache服务器目录

Apache安装完成后,有一些目录需要读者进一步了解,如:conf目录、htdocs目录、logs

目录和modules目录。

conf目录:conf目录下存放着一些Apache配置文件,其中最常用到的就是httpd.conf,

这是Apache的核心配置文件,Apache服务器的很多重要配置及功能实现都要在这个文件里

完成。这个文件也是PHP开发人员需要经常改动的文件,本书将在下一小结讲述httpd.conf,

设置一些重要的配置项。

htdocs目录:这个目录被Apache默认为服务器的根目录。这就是说,在默认情况下,

开发人员编写的HTML文档和PHP程序,只有放到这个目录下,才可以被访问或被执行。

logs目录:这个目录下存放着服务器级别的日志文件。如access.log记录用户访问的文

件及其访问日期时间、方式等。这个目录下的有些文件,有时可以用来做PHP程序调试之

用,因为服务器记录了些错误在这些日志里,开发人员可以通过这些错误,来调试PHP程

序。

modules目录:这个目录下放有Apache执行的核心模块,当Apache启动时,它会根据

配置从这个目录里载入需要的模块。一般情况下,PHP开发人员不需要对这个目录了解更多。

1.9.2进行基本的Apache配置

Apache服务器的很多功能、任务等重要配置,都是通过修改httpd.conf来完成的。如设

置服务器根目录、服务器超时时间、监听端口、Apache运行模块的载入、服务器语言字符

设置等。下面这段文字就是从httpd.conf摘出的一部分。

#

#Timeout:Thenumberofsecondsbeforereceivesandsendstimeout.

#

Timeout300

1.9.3Apache的启动与停止

对于Windows用户来说,可以通过Windows“服务”来启动和关闭Apache服务器。进

入Windows控制面板里的管理工具,打开服务,找到Apache一项,通过“操作”菜单项或

图标按钮即可完成Apache的启动与停止。

1.9.4PHP的核心配置——php.ini

与Apache相似,PHP也有自己的核心配置文件php.ini,PHP分析器启动是会读取这个

文件。与httpd.conf不同,php.ini以英文分号“;”做为注释符本小节主要讲述以下PHP基

本的配置项,这些配置项均在php.ini中设置。

doc_root:该项用来指定PHP页面在服务器的根目录,以本书安装情况为例,该项配置

如下所示。

doc_root=d:\Apache2\htdocs

注意:httpd.conf配置项与其值之间用空格分割,而php.ini使用“=”。

extension_dir:该项用来指定PHP在哪个目录下查找扩展动态库。以本书安装情况为例,

该项配置如下所示。表示从PHP安装目录下的ext目录里查找扩展动态库。

extension_dir=d:\php\ext

1.9.5PHP文件上传功能的配置

关于PHP文件上传功能的配置,主要有以下所示的两项。

upload_tmp_dir:当进行文件上传时,临时文件存放的目录,对于Linux/UNIX用户来说,

要特别注意,当前PHP用户必须拥有这个目录的写权限。

upload_max_filesize:这个配置项指定了允许上传文件大小的最大值,php.ini默认值是

2M。

1.9.6PHP中session的配置

在php.ini中,有关session的基本配置有以下所示的几项。

session.save_handler:这项配置用来设置session的存储方式,一般使用默认值files即

可,代表用文件储存。

session.save_path:这项用来设置session的保存路径,以本书为例,将session保存在

PHP安装目录的session目录下,如下所示。

session.save_path=d:\php\session

session.use_cookies:sessionid的传递方式,默认是cookie,推荐使用。

1.9.7PHP中和电子邮件有关的配置

在这里PHP的邮件配置目前只需了解一个sendmail_path项即可,其他的配置项将在以

后有更多讲述。

sendmail_path这项仅针对Linux/UNIX用户来说,它用来指定sendmail程序的目录位置,

通常会是/usr/sbin/sendmail或/usr/lib/sendmail。

1.9.8PHP基本的安全设置

这里的安全设置主要是指PHP安全模式方面的内容。基本的配置有以下几项。

safe_mode:是否允许PHP的安全模式,默认情况此项配置的值为Off,即关闭安全模

式。

safe_mode_exec_dir:该项表示安全模式下,系统可执行系统程序的目录。这个配置项

取决于上一项,如果PHP运行于安全模式下,一些系统函数将会拒绝执行不在该目录下的

系统程序。

1.9.9MySQL数据库系统的启动与关闭

对于Windows用户,和Apche类似,可以通过Windows服务来关闭和启动MySQL。进

入Windows控制面板里的管理工具,打开服务,找到MySQL一项,通过“操作”菜单项或

图标按钮即可完成MySQL的启动与停止,

1.9.10MySQL对数据的存储

首先了解一下MySQL的目录结构。Windows平台下,

MySQL会把所有的数据以文件的形式存储在MySQL安装目录的data目录下。开发人员

可以通过MySQL创建许多数据库,每创建一个数据库,就会在data目录下生成一个子目录,

这个子目录的名字就是数据库的名字,在这些子目录下存放的就是真正的数据文件。关于

MySQL更多的概念与内容,将在第12章详细讲述。

1.10实例:使用JavaScript验证HTML表单数据、

本章介绍的重点内容是HTML、CSS、JavaScipt和PHP环境的搭建。其中HTML、CSS已

经JavaScript的相关内容又是Web开发的最基础知识,掌握这方面的内容对Web开发至关

重要。因为在HTML、CSS及JavaScript三者之间,JavaScript是比较难掌握的,所以,本节

以一个JavaScript的应用为实例,作为对Web开发基础知识的一个总结。

这个JavaScript实例是用来验证HTML表单数据的简单程序。任何一个Web应用,都离

不开数据的提交和处理,这些数据要么被应用程序直接使用,要么被应用程序存入数据库。

无论哪种情况,都应该保证浏览器端所提交数据的有效性和正确性。这就要求服务器端程序,

在处理数据之前,先对HTML表单所提交的数据进行合法性验证,以保证应用程序执行正常,

或者保证存入数据库的数据完整有效。

1.11小结

本章较为详细地介绍了Web编程的基础知识和PHP开发环境的配置。Web编程基础部

分详细讲述了Web基本体系结构、HTML语言、CSS和JavaScript基础。PHP开发环境的配

置讲述了Apache、MySQL和PHP的安装及基本配置,其中重点阐述了如何修改httpd.conf、

php.ini等核心配置文件,及其之间的相互关系。最后通过一个实例验证了一个PHP的开发

过程,读者也可以通过此例,验证机器的配置是否已经正常使用。







第2章PHP语言



经过前面预备知识的学习,从本章开始,正式进入PHP语言的学习。PHP作为一种专

门用来开发Web应用的嵌入式语言,大量借用了C、C++和Perl语言的语法,同时加入了一

些其它语法特征,使编写Web程序更快更有效。之所以说PHP是嵌入式语言,是因为用PHP

开发的Web程序,大多都要在HTML文档中插入PHP代码,或者使用PHP代码生成某些HTML

文档,以满足Web应用的需求和特点。

PHP一般作为HTTP服务器(通常是Apache)的一个模块运行。这意味着,当用户访问

到一个含有PHP代码的Web页面时,HTTP服务器就会调用这个模块,通过这个模块来分析

并执行该页面的PHP代码,最终将执行结果返回给用户。PHP支持多种数据库,如MySQL、

dBase、MS_SQLServer、Oracle等。这对于基于数据库的Web开发来说是大有裨益的。

PHP从上世纪90年代中期问世以来,已经推出了很多版本,到现在已经是PHP5。本书

所讲述的PHP语言,将以PHP5为准。本书凡是出现“PHP”的地方,除非特别说明,都将

指的是PHP5。

2.1基本语法

PHP的语法和C、C++等语言的语法很相似,有C语言基础的读者,可以非常轻松地掌

握PHP的基本语法。即便是没有任何语言基础,也是值得庆幸的,那样不会受其它语言的

干扰,可以更快速地接受PHP的语法。

事实上,PHP的语法并不复杂,再加上PHP提供了大量的预定义函数,使PHP开发事

半功倍。只要按本书的讲述、一步步地学习下去,再加上自己的一点信心,相信读者会发现

PHP很容易学习掌握,并且应用起来也很快速方便。本节,先简单了解一些PHP的基本语

法。

2.1.1PHP分隔符

因为PHP是嵌入式脚本语言,需要使用某种分隔符将PHP代码和HTML的内容区分开

来,这里所说的分隔符就是“”,它们将PHP代码包含在其中,也就是说,

所有的PHP代码都应该写在“”之间。如下代码所示:

一个段落

//这一行是HTML,PHP分析器将会忽略这

行代码,不做处理

//这一行是PHP代码,PHP分析器将会执

行这段代码

另外一个段落



2.1.2给PHP程序添加注释

程序中的注释是指在一个程序文件中,对一个代码块或一条程序语句所作的文字说明,

注释是提供给开发人员看的,因此,程序中的注释会被计算机忽略而不会被执行。PHP中的

主要注释风格有:

使用符号“//”添加一个单行的注释。

使用符号“#”添加一个单行的注释。

使用“/”和“/”添加一个多行的注释,也可以用来单行注释。



2.2变量

变量是任何程序设计语言中一个基本而且重要的概念。本节的内容将讲述PHP变量基

本概念、变量的类型、PHP预定义变量以及如何使用PHP内置函数对变量进行一些处理。

2.2.1什么是变量

在程序中可以改变的数据量叫做变量,变量必须有一个名字,用来代表和存放变量的值。

PHP中使用美元符($)后跟变量名来表示一个变量,如$var就是一个变量。PHP中的变量

名是区分大小写的,因此$var和$Var表示的是不同的两个变量。

PHP变量的命名需要遵守一定的规则,这个规则是:一个有效的变量名必须由英文字母

或下划线开头,后面可以跟任意数量的英文字母、数字、下划线或其组合。如$abc、$_ab_c、

$a1b_c2都是合法的变量名,而$3xyz就不是合法变量名,因为它以数字开头。

2.2.2变量的数据类型

PHP属于弱类型语言。这就是说,变量的数据类型一般不用开发人员指定,PHP会在程

序执行过程中,根据程序上下文环境决定变量的数据类型。如一串数字“789”,在用echo

语句输出时,它作为字符串处理,但是做数学运算时,它就作为整数处理。PHP的变量主要

有以下类型:

整数类型。

浮点类型。

字符串类型。

布尔类型。

数组类型。

对象。

2.2.3变量类型的转换

和C、C++等语言不同,PHP在定义变量时,不需要明确指定变量的类型。也就是说,

把一个整数指定给变量$v,那么$v就是一个整型变量,如果把一个字符串指定给它,那么

它就是一个字符串变量。若要转换类型,在PHP程序中也是很自由的,一般不必经过特殊

的转换。

当然,PHP中也可以对变量做强制转换,这点和C语言相似,在要转换的变量之前加上

目标类型,目标类型用括号括起来。

PHP中允许的强制类型转换有:

(int),(integer)——转换成整型。

(bool),(boolean)——转换成bool型。

(float),(double),(real)——转换成浮点型。

(string)——转换成字符串。

(array)——转换成数组。

(object)——转换成对象。

2.2.4可变变量

可变变量是PHP中比较特别的一个概念,可变变量是指这样一个变量,它将某个变量

的值作为自己的变量名。







2.2.5PHP的预定义变量

PHP提供了大量的预定义变量,可以在程序或文件的任何地方使用它们。这些变量大多

数依赖于服务器的版本及其配置。本书主要讲述PHP5的预定义变量,这些预定义变量和以

前版本的有些不同,有兴趣的读者可自行了解。下面是PHP中一些常用的预定义变量。

$GLOBALS:包含指向当前程序中全局范围内有效的变量,它是一个数组,该数组的索

引(或键名)就是全局变量的名称。

$SERVER:该全局变量是一个包含诸如头信息、路径和脚本位置的数组。常见的$_SERVER

的元素包括PHP_SELF(当前正在执行的脚本的文件名)、SERVER_ADD(当前执行脚本所在

服务器的IP地址)、SERVER_NAME(当前执行脚本所在服务器主机的名称)、DOCUMENT_ROOT

(当前脚本所在文档的根目录)、SCRIPT_FILENAME(当前执行脚本的绝对路径)、

SCRIPT_NAME(当前脚本的路径)、HTTP_REFERER(链接到当前页面的前一页面的URL)、

REQUEST_URI(访问此页面所需的URI)等。

$_GET:通过HTTP的GET方法提交至脚本的表单变量。

$_POST:通过HTTP的POST方法提交至脚本的表单变量。

$_FILE:通过HTTP的POST文件上传提交至脚本的变量。

$_COOKIE:通过HTTP的Cookies方法提交至脚本的变量。

2.2.6判断变量的类型

从本小节开始,将介绍一些处理变量的方法。因为在PHP中通常通过一些预定义函数

来处理变量,所以,需要读者对函数的概念有个大概了解。

简单地说,函数是指完成某种特定功能的代码块,可以向函数传入参数,函数对参数进

行处理,并且将处理结果返回给用户。本书将在后面详细介绍函数的概念。

在PHP中,可以通过以下函数对变量的类型做判断。

函数is_integer判断变量是否为整数。

函数is_string判断变量是否为字符串。

函数is_double判断变量是否为浮点数。

函数is_array判断一个变量是否为数组。

2.2.7获取变量的类型

在PHP中,可以使用预定义函数gettype取得一个变量的类型,它接受一个变量作为参

数,返回这个变量的类型。







2.2.8设置变量的类型

使用预定义函数settype设置一个变量的类型,该函数接受两个参数,第一个参数是变

量名,第二个参数是要设置的变量的数据类型。



2.2.9判断一个变量是否已经定义

使用预定义函数isset判断一个变量是否已经定义,它接受一个变量作为参数值,返回

值如果为TRUE,说明该变量定义过,否则,说明该变量没有被定义。

2.2.10删除一个变量

使用unset语句删除一个变量。从PHP4开始unset不再有返回值,因此,严格意义上

讲,它并不是一个函数,而是一个PHP的语言结构。可以用unset一次删除多个PHP变量。

2.3常量

和变量相对应的概念是常量。上节介绍了变量、变量的数据类型及对变量的一些操作、

处理,这节将介绍常量的概念及使用。

2.3.1什么是常量

在程序执行过程中,其值不能改变的量叫做常量。这就是说,常量不能再被定义成其它

的值。常量也可以分为不同的类型,如10、0、-12是整型常量,1.23、-0.45是浮点型常量,

常量的类型从形式上就可以判别。

PHP中有一些定义好的常量,在程序中可以直接使用。开发人员也可以根据程序的需要,

自己定义新的常量。

2.3.2定义常量

在PHP中通过define()函数定义一个常量。合法的常量名只能以字母和下划线开始,后

面可以跟着任意字母、数字或下划线。常量一旦定义就不能再修改或者取消定义。



2.4表达式

表达式是指程序中任何有值的部分,PHP中几乎所有内容都是表达式。如$a=9就是一

个表达式,这个表达式的含义是:将9指定给变量$a(即赋值操作,将在下一节介绍)。很

明显,“9”的值就是9,因此“9”本身就是一个表达式。也就是说,“9”是一个值为9的

表达式,只不过在这里,9是一个整型常量。同理,变量$a也是一个值为9的表达式。从这

个例子可以看出两个值:整数常量“9”和被指定值为9的变量$a,但事实上,还有一个值,

就是这个$a=9本身的值,表达式$a=9的值就是被指定的值——9。

另外一类很常见的表达式就是比较表达式,如$a>$b等。这些表达式的值要么是0(表

示FALSE),要么是1(表示TRUE),如果表达式成立,则表达式的值为1,否则,表达式的

值为0。

2.5运算符

运算符是指,通过一个或多个表达式,来产生另外一个值的某些符号,如“+”、“%”“.”

等都是运算符。在表达式2+1中,运算符“+”有两个操作数1和2。具有两个操作数的运

算符叫做双目运算符。具有一个操作数的运算符叫做单目运算符,如表达式-6,运算符“-”

只有一个操作数6,因此,这里的“-”是单目运算符。

运算符有优先级,即表达式中多种运算符同时出现时,哪种运算符应该首先被应用。这

节将介绍基本的运算符,最后介绍基本运算符的优先级。

2.5.1赋值运算符

在PHP中,符号“=”不表示相等,而表示赋值。它的含义是将一个值指定给一个变量,

更专业一点地说,它表示把“=”右边的表达式的值赋给左边的变量,如“$a=5”表示将5

赋给$a。赋值表达式的值也就是所赋的值,这就是说,“$a=5”的值是5。除了上述最基本

的赋值方式外,还有一种所谓的“组合赋值”,通过例子来说明它的含义和用法。

2.5.2算术运算符

PHP的算术运算符有加(+)、减(-)、乘()、除(/)和取模(%)、取反(-,即取负

值)。这些运算符的用法和学校里学到的数学知识一样,



2.5.3递增/递减运算符

PHP有和C语言风格相同的递增/递减运算符。递增是指对当前表达式的值增加1,递

减正相反,对表达式的值减1。本书仅讲述整数表达式的递增/递减运算,下面分别介绍四

种风格的递增/递减运算。

$a++:先返回$a的值,然后将$a的值加1。

++$a:先将$a的值加1,然后将$a返回。

$a--:先返回$a的值,然后将$a的值减1。

--$a:先将$a的值减1,然后返回$a的值。

2.5.4字符串运算符

字符串运算符只有一个,即字符串的连接运算符“.”。这个运算符将两个字符串连接成

一个新的字符串。在2.2.2小节介绍字符串变量时,简单提到过这个运算符。

其实在此之前,已经在很多示例程序中使用过这个运算符。比如程序要显示一个执行结

果,会用“.”将一些内容连接起来,然后输出。

2.5.5逻辑运算符



2.5.6比较运算符

比较运算符用来对两个值进行比较。列举了主要的比较运算符及其可能的运算结果。







2.5.7运算符的优先级

事实上,在小学的数学知识中,就已经学习过运算符的优先级。比如1+2×3的结果是

7,不是9。因为×号的优先级高于+号的优先级。只不过在PHP中,运算符不仅限于加减乘

除。下面列举一些常见的PHP运算符的优先级,最上面的优先级最高。

new(new运算符,将在后面讲述)

++、--(递增、递减运算符)

、/、%

+、-、.

&&

||

?:(条件运算符,将在后面讲述)

=(赋值运算符,包含+=、=、.=等)

and

xor

or

2.6PHP程序的流程控制

所有的PHP程序都由语句构成,程序就是一系列语句的序列。计算机通过执行这些语

句可以完成特定的功能。一般情况下,程序都是从第一条语句开始执行,按顺序执行到最后

一句。但有时因为某种情况,需要改变程序的执行顺序,这就需要对程序的流程进行控制。

本节将讲述PHP程序的各种流程控制结构。

2.6.1程序流程控制概述

计算机程序的执行方式有3种:顺序执行、选择执行、循环执行,通过使用这3种控制

结构,可以改变程序的执行顺序,以满足开发人员解决问题的需求。

顺序结构使程序从第一条语句开始,按顺序执行到最后一句。在选择结构中,程序可以

根据某个条件是否成立,选择执行不同的语句。在循环结构中,可以使程序根据某种条件和

指定的次数,使某些语句执行多次。

PHP程序都是由一系列语句组成,语句通常以分号结尾。此外,可以使用一对花括号“{”

和“}”将一组语句组成一个语句组。例如:

{

$i=123;

$s=“Thisisastring”;

}

2.6.2条件控制语句:if和if?else语句

PHP通过一系列条件控制语句完成程序的选择执行流程。PHP中使用if、if?else(elseif)

语句构建选择程序结构。

1.if语句:f条件语句的结构如下所示。

if(expr)

statement

2.if?else语句:f?else语句的结构如下所示。

if(expr)

statement1

else

statement2

3.if?elseif语句:f?elseif语句的结构如下所示。

if(expr1)

statement1

elseif(expr2)

statement2

?

else

statement

2.6.3switch结构

上一小节讲述了使用if或者if?else语句的选择控制结构,if语句通常需要计算逻辑表

达式的值。这小节将介绍另一种选择控制结构——switch结构,它不需要计算逻辑表达式的

值。

注意:在PHP中,switch、case、break和default都是保留关键字。

switch结构首先计算表达式expr的值,如果expr的值与某个case的值匹配,则从case

后面的语句开始执行,直到遇到break语句(该语句将在后面详细介绍)或整个switch结构

结束。比如,如果expr的值是value2,那么语句statement2将会被执行。

2.6.4循环控制语句:for循环语句

前两小节讲述的是程序的选择控制流程,这节开始讲述程序的循环控制流程。循环控制

流程可以控制程序,在满足某些条件的时候,某些语句被循环执行多次。

PHP的循环控制主要有:for语句、while语句和do?while语句。本节先介绍for循环

语句。

for循环语句的结构如下:

for(初始化语句;循环条件表达式;更新语句)

statement

2.6.5while循环语句

除了for循环语句之外,还可以使用while语句控制程序循环执行。while循环语句的结

构如下:

while(expr)

statement

这里的语句statement可以是单条语句,也可以是语句组。该结构的执行流程是:当表

达式expr的值为真时,就执行循环体——语句statement,然后再次计算表达式expr的值,

直到expr的值为假,程序中断循环,跳出while循环结构。

2.6.6do?while循环语句

这小节讲述第三种循环控制结构:do?while语句,它也可以控制程序循环执行。do?

while循环语句的结构如下:

do

statement

while(expr);

这里的语句statement可以是单条语句,也可以是语句组。该结构的执行流程是:程序

首先执行语句statement,然后再计算表达式expr的值。如果表达式expr的值为TRUE,就

再次执行语句statement。

2.6.7break和continue语句

在2.6.3小节中介绍switch语句时,提及过break语句,它可以使程序流程跳出switch

结构。除此之外,break语句还可以在for、while和do?while语句中使用,这样可以使程

序立即跳出该循环结构。



2.6.8条件运算符:?:

条件运算符(?:)的用法是:

expr1?expr2:expr2

可以看出,条件运算符有3个操作数,所以它是三目运算符。它的计算规则是:如果表

达式expr1的值为TRUE,那么整个表达式的值就取expr2的值,否则,就取expr3的值。下

面的代码使用条件运算符来获取两个数中最大的那个数。

$max=($a>=$b)?$a:$b

2.7函数

在很多编程语言中都有函数这个概念。函数将为解决某一问题而编写的代码组织在一

起,使得在解决同一个问题时,可以重复这些代码。本节将介绍PHP中函数的概念、构建

和调用函数等内容。

2.7.1PHP中函数的概念

在数学知识里,函数是由参数的定义域和在这个参数定义域上的某种规则组成的。当选

定某一参数时,函数的值也是惟一确定的。例如,有这样一个数学函数:f(x)=2x+3,那么就

有f(1)=5,f(3)=9。这里的1、3都是函数f的参数,而5、9都是这些参数对应的函数f的值。

PHP语言中的函数和数学中函数的概念很相似,只不过PHP中的函数不仅仅是做一些

数学运算,而是要完成更多、更复杂的功能。

在程序设计中,经常将一些常用的功能模块编写成函数,放在公用函数库中,供程序或

其它文件使用。函数就像一些小程序,用它们可以组成更大的程序。函数之间也可以相互调

用,完成更复杂的功能,但它们之间是相互独立的,互不隶属。

2.7.2定义函数和调用函数

PHP使用下面的语法定义一个函数:

functionfunc_name(param_list)

{statement}

其中function是PHP的保留关键字,表示开始定义一个函数。func_name是函数名,由

开发人员自行指定,函数名以字母或下划线开始,后跟任意字母、数字或下划线。函数名后

的一对括号,用来存放函数的参数param_list,如果所定义的函数不需要传入参数,括号内

留空,但不能没有括号。最后花括号括住的语句statement叫做函数体,它可以是单条语句,

也可以是多条语句,这些语句完成函数所要实现的功能。下面的代码演示了如何定义了一个

函数。

2.7.3函数的参数和函数的返回值

上小节的函数say_hello()只能向“Jack”显示问候语,如果想向更多的人显示问候语,

该怎么做呢?这就是函数参数的问题。在大多数情况下,调用函数都会有数据的传递,这就

是前面讲到的函数参数。将参数传递个函数,函数根据不同的参数会完成不同的功能,或有

不同的输出。

在函数say_hello()的例子中,如果想要向更多的人显示问候语,可以传递一个参数给函

数say_hello(),这个参数就是不同的人名,在函数体内输出这个变量即可。

2.7.4PHP函数的传值与传址

上小节讲述的向函数传入参数,是按传值方式传入的。传值的含义是指,在函数体内,

会生成一个传入值的拷贝,在函数内部对参数的修改,不会影响到传入的值。有时,因为开

发的需要,希望在函数内部能够修改传入的值,这是就需要对函数参数使用传址方式。传址

的含义是指,在函数体内,真实引用传入的值,这意味着,在函数体内使用的函数参数,和

传入的值完全是同一个,而不单单是传入值的一个拷贝。这时,在函数内部修改了参数的值,

同时也就修改了传入的值。

在PHP中,要想在函数参数中传址,需要在定义函数时,在参数前加上符号:&。

2.7.5函数和变量作用域

变量的作用域就是变量的有效范围。对于大多数PHP变量,作用域只能有一个。但是,

在用户自定义函数中,存在一个单独的局部函数范围。在一个函数内部定义的变量是局部变

量,它只在本函数内有效,它的作用域就是当前的函数之内。这就是说,一个在函数外部定

义的变量,不会在函数内部起作用,反之亦然。







2.8小结

本章主要介绍了PHP的基本语法,包括变量类型、常量、表达式、运算符、程序控制

流程和函数的基本概念。其中变量、表达式、程序控制流程和函数是本章的重点知识,读者

应该熟练掌握这些内容。

流程控制是程序设计中非常关键的地方,虽然这些控制语句看起来很简单,但使用过程

中,如果因为逻辑错误,将可能导致死循环发生。





第3章用PHP进行Web编程



PHP是开发Web应用的首选语言之一,也是最佳选择。PHP本身就是为Web而生的。

它提供了一系列可以使Web开发更加方便、更加容易的功能和特性。

本章先介绍用PHP进行Web编程的一些基本用法,了解用PHP进行Web编程的一些

特性,接着通过一个简单的完整实例实践这些用法和特性,加深对使用PHP进行Web编程

的理解和掌握。

3.1PHP的Web编程基础

本节将讲述最基本的PHPWeb编程知识,诸如获取表单数据、处理表单数据、PHP中

的Session和上传文件等。

3.1.1访问和获取HTML表单数据

在PHP中,可以通过两个预定义变量,很方便地获取HTML表单数据。这两个预定义变

量在前面提及过:$_GET和$_POST。它们都是PHP的自动全局变量,可以直接在PHP程序

中使用。

变量$_GET是表单数据组成的数组,它由HTTP的GET方法传递的表单数据组成。表单

元素的名称就是数组的“索引”。这就是说,通过表单元素的名称(即name属性的值),就

可以获得该表单元素的值。例如某表单中,有一个文本输入框,名称为“user_name”,那

么在PHP程序中,就可以通过$_GET[‘user_name’]获取文本框中用户输入的值。

变量$_POST的用法和$_GET类似。通过HTTP的POST方法获取的表单数据,都将存放

在该变量中,该变量也是一个数组。

3.1.2用PHP处理表单数据

在上小节的文档3-1.html中,对于表单中的“爱好”多选框,只选择了“阅读”一项。

如果做了多个选择,再提交表单,.php输出的结果就有所不同。

所选择的3个checkbox,只有最后1个的值被输出了,其他两个选项的值没有被输出,

这并不是所期望的结果。之所以出现这种情况,是因为多选按钮元素checkbox的名称都为

“hobby”,而PHP要求,如果表单元素同名,就必须以数组方式命名,并为其value属性赋

值,这样PHP才能正确取值。

因此,首先修改3-1.html的中表单元素checkbox的名称,以数组方式命名checkbox元

素,即在原来的名称“hobby”后加上“[]”,

3.1.3用PHP验证表单数据有效性

在上小节的文档3-1.html中,对于表单中的“爱好”多选框,只选择了“阅读”一项。

如果做了多个选择,再提交表单,3-2.php输出的结果就有所不同。提交表单后,,所选择的

3个checkbox,只有最后1个的值被输出了,其他两个选项的值没有被输出,这并不是所期

望的结果。之所以出现这种情况,是因为多选按钮元素checkbox的名称都为“hobby”,而

PHP要求,如果表单元素同名,就必须以数组方式命名,并为其value属性赋值,这样PHP

才能正确取值。

3.1.4PHP中的session

session是Web开发中最常见的概念,也是最常用的功能之一。简单地说,是session

是指用户进入网站到浏览器关闭的这段时间(或过程)。

HTTP是面向无连接(或无状态)的协议。这意味着,在HTTP中,一个完整的请求/响

应过程结束之后,客户端(即浏览器)和服务器端的链接就已中断。此时,如果用户再从当

前页面访问其他页面,即向服务器发出请求,服务器端并不知道此请求是哪个用户发起的,

因此也就无法得知用户的浏览状态。这样就遇到一个问题:当前页面中的某个数据(或变量),

无法在接下来访问的页面中使用。而在实际的Web开发中,经常要在页面之间传递数据,

而且不同的访问用户,传递的数据是不同的。虽然解决这个问题的办法有很多,但通过

session解决这个问题,会更加方便、快速、有效。通过session记录用户的有关信息,以供

用户以此身份向服务器发起请求时,服务器能够根据session做出正确的判断,区分不同用

户的请求。

3.1.5PHP中的文件上传处理

在Web开发中,经常会遇到从客户端上传文件到服务器端的问题。通常,文件上传使

用的是HTTP的POST方式,使用POST方式传递文件到服务器端。要完成文件上传处理,首

先要定义HTML表单的enctype属性为”multipart/form-data”,如下代码所示。



在PHP程序中,使用全局变量$_FILES处理文件上传。$_FILES是一个数组,包含了要上

传的文件的信息。下面,以上述HTML表单为例,介绍$_FILES数组的内容。

$_FILES[‘myfile’][‘name’]表示客户端文件的原始名称,即要上传的文件的文件名。

其中myfile就是在代码3-6中定义的input元素的name属性的值:
type="file"/>。

$_FILES[‘myfile’][‘type’]表示上传文件的类型,例如“image/gif”。

$_FILES[‘myfile’][‘size’]表示已上传文件的大小,单位为字节。

$_FILES[‘myfile’][‘tmp_name’]表示文件上传后,在服务器端存储的临时文件名。

$_FILES[‘myfile’][‘error’]表示和文件上传的相关错误信息。

3.2实例:用PHP开发一个简单的网站

通过上一小节对PHP开发Web应用基础知识的学习,读者掌握了使用PHP获取和处理

表单数据、用PHP验证数据的有效完整、PHP中session的使用和处理文件上传等基本技能。

本节,将通过一个具体的实例来进一步加强对这些技能的应用。本节还将进一步学习界面设

计和布局方面的应用。

3.2.1网站功能设计

本节制作一个简单数据录入系统。首先用户提供登录名和密码登入系统,之后使用

session维护用户状态。进入系统后,用户可以录入一些个人信息。该系统还应该实现对于

不同用户录入的数据,有不同的显示结果。

该系统客户端使用CSS完成页面设计和布局,并且使用JavaScript验证数据是否有效。

客户端使用PHP处理这些数据,并将数据显示至浏览器。

3.2.2页面设计

初步考虑设计两个页面。一个页面是用户登录界面,另一个是用户信息的录入界面。此

外还需要PHP程序完成用户验证,和负责获取表单提交的数据,并将表单数据显示出来。

3.2.3用JavaScript实现客户端响应

用JavaScript可以在客户端验证数据的有效性。在上述登录页面中加入一些JavaScript

脚本,可以验证用户是否输入了用户名。

其中在标签内加入了JavaScript脚本,用以检验用户输入的用户名是否为空,如

果为空,则向用户弹出一个提示对话框。此外,该HTML文档中还加入了CSS代码,定义了

页面字体的显示大小、表格单元格背景颜色等页面效果。

3.2.4服务器端用PHP处理请求

当用户输入了用户名后,该数据将提交至一个PHP程序做处理。服务器端的PHP处理

程序需要显示用户刚刚输入的用户名,以及一个录入用户信息的界面。考虑到不同的用户录

入的信息都是不同的,因此对于不同的用户,只能看到自己的录入信息,所以要在程序中使

用session维护不同用户的状态和数据。

3.3小结

本章讲述了使用PHP进行Web编程的基础知识和基本技能。包含:用PHP获取HTML

表单数据、用PHP处理表单数据、用PHP验证数据、PHP中session的使用及使用PHP处理

文件的上传。最后通过一个简单实例,加深对这些基本技能的实践和掌握。











第4章PHP对数组的处理



PHP的一个优势就是提供了丰富的函数,用来处理各种类型的数据、完成一些相对复杂、

经常性、重复性多或者和底层有关的操作。这些函数都可以在程序中直接使用。从本章开始,

本书就为读者介绍这些PHP内置函数的用法。这一章主要讲述一些和数组处理有关的常用

PHP函数。

4.1建立数组的方法

在第2章介绍数据类型时,已经介绍过建立数组的方法。本节对建立数组的方法做进一

步的说明。使用PHP的array()语言结构可以创建一个数组,如下代码所示。

$ms_office=array(“word”,”excel”,”outlook”,”access”);

上述代码创建了一个名叫$ms_office的数组,它包含4个单元,每个单元存储1个值,

这些值是:word、excel、outlook和access,这些值也被称为数组元素。注意,这里的array()

不是函数,它只是PHP的语言结构。

数组的索引又叫“键值”或者“下标”。使用“=>”运算符,可以为数组指定索引和值。

它的语法格式是:“索引=>值”,每对“索引=>值”之间使用逗号“,”分开。如下代码使用

“=>”为数组指定索引和值。

4.2输出数组元素的方法

在实际开发中,经常要访问数组的值。如果每次都按数组索引来取数值元素,会非常麻

烦。在PHP中可以通过各种循环来快速访问数组元素。本节就介绍常用的for和foreach。

4.2.1使用for循环语句输出数组元素

对于一个按整数顺序索引的数组,可以通过for循环语句,来依次访问数组元素,







4.2.2使用foreach循环语句输出数组元素

PHP还专门为数组提供了一个循环语句:foreach循环语句,它的语法结构如下所示。

foreach($arrayas$some_var)

{

statement

}

其中foreach和as都是PHP关键字。该语法结构的含义是:按顺序,每次将数组$array

中的一个元素存入变量$some_var后执行statement语句,然后取下一个元素执行statement

语句,依次下去,直到所有元素都取到。和for循环语句一样,statement可以是单条语句,

也可以是一个语句块。

4.2.3使用print_r函数显示数组元素

有时,为了在程序中查看一个数组的结构(即索引和值的对应关系),需要将数组结构

显示到页面上。这可以通过PHP的print_r函数实现。

HTML中的“
”和“
”标签,可以把它们之间文本中的空格、回车、换行、

tab键表现出来,即按照文本原先的布局显示。在代码4-6中,调用函数print_r之后,也可

以加上输出结束标签“”的代码。

4.3计算数组元素个数

在PHP开发中,经常遇到对数组元素个数的计算,通常也称之为计算数组的大小。使

用函数count计算数组元素的个数,该函数语法如下所示。该函数的返回值为一整数,即数

组元素的个数。

intcount(mixed$var);

上述语法格式中的“mixed”表示参数var可以是多种不同的数据类型,这意味着,该

函数不仅仅可以用来计算数组元素个数。“mixed”这种表示方法会在本书后续内容中继续使

用。

4.4对数组进行分割、合并

数组的分割是指将一个数组拆分成一个或多个数组,而数组的合并,可以看成是分割的

逆运算,即将多个数组组合成一个新的数组。下面分别介绍和分割、合并数组有关的PHP

内置函数。

4.4.1实现数组分割

使用函数array_chunk可以对一个数组进行分割,该函数语法如下所示。

arrayarray_chunk(array$input_array,int$size,bool$preserve_key);

该函数接受3个参数,$input_array是将要分割的数组(即原数组),$size表示原数组

被分割后,每个数组中元素的个数,$preverse_key是可选参数,它为TRUE时,分割后的每

个数组的索引使用原数组的索引名;它为FALSE时,分割后的每个数组的索引都将使用从0

开始的整数索引。该函数的返回值是一个数组,这个数组的索引从0开始,该数组的每个元

素仍然是一个数组,即原数组被分割后的一个数组。

4.4.2实现数组合并

使用函数array_merge可以合并一个或多个数组,该函数的语法如下所示。

arrayarray_merge($array?);

该函数接受一个或多个数组作为参数,PHP5中,它只接受array类型的参数。该函数返

回一个合并后的数组。



4.5处理数组元素和键值位置

PHP的每个数组内部均会有一个指针,指向当前元素。这里所谓的指针,可以把它理解

成程序即将要处理的元素所在的位置。处理数组元素和键值(索引)的位置,就是获取数组

某个位置上的元素,或获取该元素后,将该指针移动到其他位置。PHP中,处理数组元素和

键值位置的函数主要有以下几个。

current:该函数返回数组的当前元素,不移动当前指针位置。

next:该函数返回当前元素的下一个元素的值,并将指针向后移动一位,下一个元素不

存在时,返回FALSE。

prev:该函数返回当前元素的上一个元素的值,并将指针向前移动一位,上一个元素不

存在时,返回FALSE。

end:该函数返回数组的最后一个元素的值。

4.6对数组进行排序

对数组排序实际指的是对数组元素的排序。使用PHP的有关内置函数,可以对数组元

素按多种方式进行排序,下面分别介绍这些函数的用法。

4.6.1使用sort对数组进行排序

使用函数sort对数组元素按顺向排序,即按字母由前向后或按数字由小到大排序。该

函数的语法如下所示。

boolsort(array&$arr[,int$sort_flag]);

该函数接受一个数组作为输入参数,如果处理成功,该函数返回TRUE,否则,该函数

返回FALSE。该函数将会删除所要排序的数组原有的索引值,从而为该数组使用新的索引值。

代码4-11演示了如何使用该函数为数组元素排序。

4.6.2使用rsort对数组进行逆向排序

使用函数rsort对数组元素做逆向排序,即按字母从后到前或按数字由大到小排序。该

函数的语法如下所示。

boolrsort(array&$arr[,int$sort_flag]);

该函数接受一个数组作为输入参数,如果处理成功,函数返回TRUE,否则返回FALSE。

该函数将会删除所要排序的数组原有的索引值,从而为该数组使用新的索引值。

4.6.3排序时保持原数组的索引

前面介绍的两个函数sort和rsort,都会为要排序的数组重新建立索引。有时,对数组

排序后,仍需要保持原数组的索引,对于这种情况,在PHP中可以使用如下两个函数。

asort:该函数对数组元素进行排序,并且保持数组的原索引关系不变。该函数仍然对

数组元素按顺向排序。如果处理成功,该函数返回TRUE,否则返回FALSE。

ksort:该函数对数组元素按索引名顺序排序,并且保持数组的原索引关系不变,如果处

理成功该函数返回TRUE,否则返回FALSE。该函数主要用于关联数组。

4.6.4数组的随机排序

PHP提供一个随机排序数组元素的函数shuffle(),该函数的语法如下所示。

boolshuffle(array$array)

该函数为参数数组$array中的元素赋予新的键名,这将删除原有的键名而不仅仅是重新

排序。如果执行成功该函数返回TRUE。

4.6.5数组的反向排序

本节最后,介绍一个可以将数组元素按原顺序反向排序的函数,该函数是

array_reverse()。其语法如下所示。

arrayarray_reverse(array$array[,bool$preserve_keys])

该函数返回一个与原数组单元顺序相反的数组,原数组以参数$array传入该函数,该函

数的第2个参数是可选的,如果第2个参数$preserve_keys设置为TRUE,则原数组的键名将

会被保留。

4.7重置一个数组

PHP中,重置一个数组指的是,将数组中的内部指针移动到该数组的第一个元素所在的

单元。使用函数reset可以完成对数组的重置。该函数的语法如下所示。

mixedreset(array&$arr);

该函数接受一个数组类型的变量,将函数内部指针指向数组第一个单元,并将第一个单

元的元素返回。如果数组为空,该函数返回FALSE。

4.8用数组对变量赋值

PHP中,可以将数组的元素作为值赋给变量,使用语言结构list()可以完成这个功能。严

格意义上讲,list()和array()一样,不是函数。

在上述程序中,通过list,将数组$planet的第一个元素’Earth’赋给了变量$no1,将第

二个元素赋给了变量$no2,将第3个元素赋给了变量$no3。

4.9快速创建数组

函数range()可以快速创建制定元素范围的数组。其语法如下所示。

arrayrange(mixed$low,mixed$high[,number$step])

函数range()返回一个数组,其中元素为参数从$low到$high的序列,包括它们本身。例

如range(1,9)相当于array(1,2,3,4,5,6,7,8,9),如果$low>$high,则序列将从$high到$low。该

函数的第3个参数$step是可选的,如果给出了step的值,它将被作为元素之间的跨度值。

step应该为正值。如果未指定,step则默认为1。

4.10压入和弹出数组元素

这里所说的压入是指,向数组的末尾增加一个元素。而弹出是指,将数组中的最后一个

元素取出。PHP提供两个函数分别完成这两个功能,这两个函数是array_push()和array_poo()。

4.10.1压入数组元素

函数array_push()将一个或多个元素压入数组的末尾,其语法如下所示。

intarray_push(array$array,mixed$var)

该函数将参数$array当成一个数据栈,并将传入的参数$var压入$array的末尾。array

的长度将根据入栈变量的数目增加,执行正常时,该函数返回数组$array新的单元总数。

4.10.2弹出数组元素

函数array_pop()将将数组最后一个元素弹出,其语法如下所示。

mixedarray_pop(array$array)

该函数弹出并返回参数$array数组的最后一个单元,并将数组$array的长度减一。如果

参数$array为空(或者不是数组),该函数将返回NULL。需要注意的是,使用本函数后会重

置数组指针,相当于使用了函数reset()。

4.11改变数组字符索引名的大小写

PHP提供了一个函数,可以将以字符串作为数组索引(键名)的大小写全部更换,这个

函数是array_change_key_case(),该函数的语法如下所示。

arrayarray_change_key_case(array$input[,int$case])

函数array_change_key_case()将参数$input数组中的所有索引改为全小写或大写。可选

参数$case用来指定大小写转换方式,它为两个常量值:CASE_UPPER和CASE_LOWER。没有

指定该参数时,该函数使用的默认值是CASE_LOWER。

4.12对数组的集合处理

函数array_intersect()可以用来计算数组的交集,其语法如下所示。

arrayarray_intersect(array$arr1,array$arr2[,$arr...])

函数array_intersect()返回一个数组,该数组包含了在参数数组$arr1中出现,同时也出

现在所有其它参数数组中的值,注意键名保留不变。

4.13交换数组索引和元素

PHP中的数组可以通过函数实现索引和元素的交换,这对程序实现某些操作带来极大的

便利,这个函数就是array_flip(),该函数的语法如下所示。







4.14快速填充数组元素

PHP提供函数快速填充数组,将数组中的某些或所有元素都置成通一个值,这个函数是

array_fill(),其语法如下所示。

arrayarray_fill(int$start,int$num,mixed$value)

函数array_fill()有3个参数:其中参数$start指定要填充元素的开始索引,参数$num表

示将$num个数组元素以参数$value填充。



4.15统计数组元素出现次数

函数cout()用来计算整个数组元素的个数,而函数array_count_values()用来统计数组中

各元素出现的次数,即数组中各元素的个数。函数array_count_values()的语法如下所示。

arrayarray_count_values(array$arr)

该函数返回一个数组,这个数组把参数数组$arr中的元素作为索引,元素出现的次数作

为对应索引的值。

函数array_count_values()统计出数组$arr中,各个元素出现的次数,而且从这个执行结

果可以看出,函数array_count_values()统计元素时,是元素大小写的,比如Say和say会分

别被统计。

4.16检查数组索引是否存在

PHP提供函数array_key_exists()检查给定的索引是否存在于数组中,该函数语法如下所

示。

boolarray_key_exists(mixed$key,array$search)

该函数查找由参数$key指定的索引,是否存在于由参数$sarch指定的数组中,如果存在,

该函数返回TRUE,否则或者出错时,该函数返回FALSE。参数$key可以是任何能作为数组

索引的值。

4.17取得数组中的所有索引

PHP提供函数array_keys()用来获取数组中所有的索引名,该函数语法如下所示。

arrayarray_keys(array$arr[,mixed$search_value[,bool$strict]])

该函数会将参数数组$arr中,所有的索引名返回到一个数组中。参数search_value是可

选的,如果指定该参数,则函数array_keys只返回该元素值对应的索引名,可选参数$strict

用来进行全等比较。

4.18用回调函数处理数组

PHP支持回调函数操作给定数组的元素上,这也是PHP数组函数的强大功能之一。函

数array_map()就可以完成这样的工作,它将回调函数作用到给定数组的元素上。其语法如

下所示。

arrayarray_map(callback_func,array$arr1[,array...])

函数array_map()返回一个数组,该数组包含了参数$arr1中的所有元素经过函数

callback_func处理过之后的元素。callback接受参数的数目应该和传递给array_map()函数的

数组数目一致。

4.19其他数组处理函数

这节介绍两个在实际应用中经常会用到的两个PHP内置函数:in_array()和key()。下面

分别加以介绍。

in_array:该函数可以判断某个值是否存在于数组中。如果在数组中找到该值,函数返

回TRUE,否则返回FALSE。

key:该函数可以获取数组中当前单元的索引值。

4.19.1判断某个值是否存在于数组

代码4-30演示了函数in_array的用法。

注意:从该执行结果可以看出,in_array是区分大小写的。“Mars”和“mars”被认为

是两个不同的值。







4.19.2获取数组中当前单元的索引值

代码(详细内容请参照本书)演示了函数key的用法。这段程序首先将当前指针指向数组

的最后一个单元,然后通过函数key获取当前元素(即最后一个元素)的索引值。







4.20小结

本章介绍了对数组进行处理的一些主要的PHP内置函数和语言结构。他们包括:

使用array创建数组。使用for、foreach等循环访问数组元素。使用函数count()计算数

组元素个数。使用函数array_chunk()/array_merge()分割/合并数组。处理数组元素和键值位

置的函数current()、prev()、next()、end()等。对数组元素排序的函数sort()、rsort()、asort()、

ksort()等。使用reset()重置数组。使用list()将数组元素赋值给变量。使用函数shuffle()对数

组元素进行随机排序。快速创建数组的函数range()。使用函数array_push()、array_pop()压

入和弹出数组元素。

使用函数array_change_key_case()改变字符索引名的大小写。对数组做集合处理的函数

array_intersect()、array_intersect_assoc()、array_diff()和array_diff_assoc()。交换数组索引和

元素的函数array_flip()。快速填充数组元素的函数array_fill()。使用函数array_count_values()

统计数组元素出现的次数。使用函数array_key_exists()检查索引是否存在。使用函数

array_keys()取得数组中的所有索引。使用回调函数处理数组的函数array_map()。使用

in_array()检查数组中是否存在某值。使用key()获取数组中当前单元的索引值。本章介绍了

较多关于处理数组的PHP函数,读者需要再实践中慢慢掌握这些函数及其用法。









第5章PHP对字符串的处理



PHP对字符串的处理的完美支持,是PHP的强大功能之一。PHP提供了数十个用来处理

字符串的内置函数,使用这些函数,可以在PHP程序中很方便地完成对字符串的各种操作。

本章为读者介绍PHP开发中一些比较常用的字符串处理函数。

5.1对字符串做分割和合并

在PHP程序中,可以使用函数explode用一个字符串分割另一个字符串,该函数的语法

如下所示。

arrayexplode(string$separator,string$str[,int$limit])

函数explode使用字符串$separator(该函数的第1个参数)作为边界点,来分割字符

串$str(该函数的第2个参数)。该函数的返回值是一个数组,字符串被分割后,分割的部

分会存入该数组。该函数最后一个参数$limit是可选参数。如果设置了该参数,则返回的数

组中最多有limit个元素,最后一个元素包含字符串$str的所有剩余部分。

5.2对字符串做比较和替换

字符串比较通常是指,判断两个字符串是否一样,用更专业的说法,就是比较两个字符

串的大小。PHP通过字符的ASCII码来决定字符的大小,从而决定字符串的大小。例如,字

母a的ASCII码是097,字母b的ASCII码是098,因此’b’>’a’。字母表中,靠后字母的

ASCII码大,所有的小写字母比大写字母的ASCII码大。

5.2.1比较两个字符串大小

PHP提供函数strcmp对两个字符串比较大小。该函数语法如下所示。

intstrcmp(string$str1,string$str2);

函数strcmp接受两个参数,它们是待比较的字符串。该函数返回值是整数,如果字符

串$str1和字符串$str2相等,则函数返回0,如果字符串$str1小于字符串$str2,则函数返回

-1,如果字符串$str1大于字符串$str2,则函数返回值大于0。

5.2.2字符串的替换

在实际开发中,有时需要将字符串中的某些字符串替换成其他字符串,这可以通过PHP

的内置函数str_replace来完成。该函数的语法如下所示。

stringstr_replace(string$search,string$replace,string$str);

该函数将字符串$str中的$search部分全部替换成字符串$replace,并且返回替换后的字

符串。

5.3输出打印字符串

向Web页面输出字符串是PHP程序最常用的操作之一。事实上,在本节之前的几乎示

例程序中都有输出字符串的代码。在PHP输出字符串的方式有如下两种。

(1)使用print。它的用法如下所示。

intprint(string$str);

print将字符串$str输出,并且总是返回1。严格意义上讲,print不是函数,它和echo

一样,只是PHP的语言结构,因此,可以不使用括号将其参数括住。

(2)使用echo。使用echo输出字符串,在此之前已经大量使用,这里不再举例说明。

5.4格式化字符串

将字符串转换成某种特定的格式,叫做字符串的格式化。比如一本书的价格是39元,

一般都会格式化成“39.00”的形式。对字符串进行格式化,是程序开发中经常遇到处理操

作之一。PHP语言提供函数sprintf,将字符串格式化,该函数的语法如下所示。

stringsprintf(string$format,mixed$args);

参数$format是要转换的格式,该参数通常以百分号%开始,到转换字符为止。例如,%1.2f

就是一个转换格式,其中f就是转换字符,它表示将字符串格式化成浮点数。这种用法,对

于有C语言基础的读者来说,一定不会陌生。该函数返回格式化后的字符串。







5.5获取字符串中的一个子串

获取字符串中的一个子串是指,获取这个字符串的某一部分。在PHP中,可以使用函

数substr来获取字符串的某一部分。该函数的语法如下所示。

stringsubstr(string$str,int$start,int$length);

函数substr将字符串$str中,从位置$start的字符开始,截取长度为$length的字符串,

然后返回该字符串。需要注意的是,字符串的第1个字符的位置是0,第2个字符的位置是

1,以此类推。

5.6删除字符串末尾部分的空白字符

PHP程序有时需要去掉字符串中的空白字符,比如用户从网页提交数据时,在文本框输

入内容后,多敲入了一些空格,而PHP处理程序很可能要将这些数据存入数据库,这时,

不希望将这些没有实际意义的空白字符存入数据库,因此要将这些空白字符处理掉。

PHP提供了一些函数,分别可以处理字符串末尾、开头的空白字符,也提供了同时处理

字符串两端空白字符的函数。本节先介绍处理字符串末尾部分空白字符的内置函数。在PHP

中,可以使用函数rtrim删除字符串末尾部分的空白字符。该函数的语法如下所示。

stringrtrim(string$str);

5.7删除字符串开始部分的空白字符

和函数rtrim对应的是函数ltrim,该函数将字符串开始部分的空白字符删除掉。从这个

函数的命名可以看出,ltrim中的字母l代表的是left,一个字符串的left就是它的开始部分,

所以,ltrim表示去掉字符串开始部分的空白字符。同理,rtrim中的首字母r表示right。这

样,初学者就容易记住这两个函数及其用法了。函数ltrim的语法如下所示。

stringltrim(string$str);

该函数将字符串$str开始部分的空白字符删除,返回开始部分没有空白的字符串。

5.8删除字符串两头的空白字符

如果希望删除字符串两头的空白字符,可以使用函数trim,该函数的语法如下所示。

stringtrim(string$str);







5.9获取字符串的长度

字符串的长度一般是指,组成字符串的字符的数量。PHP提供函数strlen来获取一个字

符串的长度。该函数的语法如下所示。

intstrlen(string$str);

该函数返回字符串$str的长度。







5.10对字符串做大小写转换

PHP提供两个函数分别完成对字符串中字母的大小写转换,它们是:

strtoupper($str),将字符串$str中的字母全部转换为大写字母。

strtolower($str),将字符串$str中的字母全部转换为小写字母。



5.11处理含有HTML标记的字符串

使用PHP进行Web页面开发,经常会遇到处理HTML标记的问题。PHP提供的函数

htmlentities完成对字符串中HTML标记的处理,该函数可将字符串中有关字符转换成HTML

实体,即HTML字符编码。该函数的语法如下所示。

stringhtmlentities(string$str);

函数htmlentities将字符串$str中的HTML标记(如<、>等)转换成相关编码的形式。







5.12多次生成一个字符串

函数str_repeat()可以用来重复生成一个字符串,该函数的语法如下所示。

stringstr_repeat(string$input,int$num)

函数str_repeat()有两个参数,第1个参数$input是要重复生成的字符串,第2个参数

$num是要重复的次数。参数$num的取值必须大于等于0,如果$num设置为0,该函数会

返回一个空字符串。



5.13将字符串分析到变量

这小节所说的分析字符串,是指分析URL中的查询字符串。例如一个URL是:

http://www.somesite.com/index.php?i=000&key=1a2b3c&cnt=10,那么该URL的查询字符串就

是i=000&key=1a2b3c&cnt=10。PHP提供函数parse_str()可以分析类似的字符,并将分析结果

赋值给变量。函数parse_str()的语法如下所示。

voidparse_str(string$str[,array$arr])

本函数可将URL的查询字符串参数$str解析,返回的变量名及值就和查询字符串中的名

称及值相对应。该函数第2个参数一个指定的数组,是可选的。如果指定这个数组参数,那

么函数parse_str()将分析字符串得到变量作为数组索引、值作为数组元素存入该数组。

5.14转换字符串到数组

PHP提供的函数str_split(),可将字符串转换成一个数组,即将数组分割成几个部分,每

个部分的值作为数组的元素。该函数的语法如下所示。

arraystr_split(string$str[,int$split_length])

该函数将字符串$str做分割,将分割后的字符串各部分存入数组,并将数组返回。可选

参数$split_length用来指定分割字符串长度。如果没有指定该参数,函数将把字符串$str按

一个字符的长度分割。

5.15计算字符串的Hash(哈希)

所谓的哈希(Hash)也叫散列,它就是指把任意长度的输入(又叫做预映射),通过散

列算法,变换成固定长度的输出,该输出就是散列值。

Hash主要用于信息安全领域的加密算法,它把一些不同长度的信息转化成杂乱的128

位的编码,这个编码,叫做Hash值。也可以说,Hash就是找到一种数据内容和数据存放地址

之间的映射关系。常见的Hash算法有MD5,SHA1等。

PHP中提供了对应的函数,完成对字符串做MD5哈希计算的函数,也提供函数完成SHA1

哈希计算的函数,这两个函数分别是md5()和sha1(),下面分别加以简要说明。函数md5()

的语法如下所示。

stringmd5(string$str)

该函数用来计算参数字符串$str的MD5哈希,另外一个计算哈希的函数sha1()的语法

如下所示。

stringsha1(string$str)

5.16小结

本章通过介绍一些主要的字符串处理函数,来学习在PHP程序中如何完成对字符串的

操作。这些函数都是比较基本的,读者务必掌握。本章讲到的函数包括:将字符串分割后存

入数组的函数explode()。将数组中的元素合并成字符串的函数implode()。比较两个字符串

大小的函数strcmp()。字符串替换函数str_replace()。输出字符串的语言结构echo和print。

字符串格式化函数sprintf()。

截取字符串的函数substr()。删除字符串开头和末尾空白字符的函数ltrim()、rtrim()、

trim()。获取字符串长度的函数strlen()。对字符串做大小写转换的函数strtolower()和

strtoupper()。处理含有HTML标记的函数htmlentities()、htmlspecialchars()和

html_entity_decode()。重复生成字符串的函数str_repeat()。分析字符串到变量的函数

parse_str()。转换字符串到数组的函数str_split()。计算字符串Hash的函数md5()。和sha1()。
献花(0)
+1
(本文系高强的图书...首藏)