第2章 PHP基础

本章着重讲述PHP基本语法、PHP程序的组成以及PHP编码规范,详细讲解PHP数据类型以及数据输出等知识。通过本章的学习,读者可以从整体上认识PHP程序的各个组成部分,并可以制作功能简单的用户注册系统。

2.1 PHP代码基本语法

PHP是一种在服务器端执行的HTML内嵌式的脚本语言,PHP代码可以嵌入到HTML代码中,HTML代码也可嵌入到PHP代码中,例如,程序htmlWithPHP.php如下。

图像说明文字

在PHP程序中,所有PHP代码必须位于PHP开始标记和PHP结束标记之间,开始标记用于表示PHP代码的开始,结束标记用于表示PHP代码的结束,这是书写PHP程序代码需要遵守的最基本规则。只有这样,PHP预处理器才能正确识别一个PHP程序中哪些是PHP动态代码,哪些是静态文本,PHP预处理器只会针对PHP动态代码进行分析、处理。

2.1.1 PHP开始标记与结束标记

PHP程序代码共有4种风格的开始标记和结束标记,4种风格的标记作用是等效的。

(1)开始标记“<?php”和结束标记“?>”。这是PHP代码中最为常用的标记风格,在任何情况下都可以使用该标记风格标识PHP代码,程序htmlWithPHP.php使用的就是这种标记。
(2)开始标记“”。这种标记风格可以在任何情况下使用,不过由于程序书写和阅读上的不便,编程过程中使用这种标记风格的几率较小。例如,程序htmlWithPHP.php代码可以修改为如下代码。

图像说明文字

(3)开始标记“<?”和结束标记“?>”。这是第一种标记风格的简写方式,由于这种标记风格给程序的书写以及阅读带来很多方便,编程过程中使用这种标记风格的几率较大。不过使用这种标记风格前,必须将php.ini配置文件中的选项short_open_tag设置为On,否则这种标记风格将不起作用。例如,程序htmlWithPHP.php代码可以修改为如下代码。

图像说明文字

(4)开始标记“<%”和结束标记“%>”。这是模仿ASP、JSP风格的一种标记,为ASP、JSP编程人员转向PHP编程带来了方便。不过使用这种标记风格前,必须将php.ini配置文件中的选项asp_tags设置为On,否则这种标记风格将不起作用。例如,程序htmlWithPHP.php代码可以修改为如下代码。

图像说明文字

2.1.2 PHP注释

为了提高代码的可读性,应该养成注释的习惯,这样才能减少程序代码后期维护的时间。PHP注释和PHP代码相同,必须位于PHP开始标记与结束标记之间;不同之处在于PHP注释的内容会被PHP预处理器过滤,不会被PHP预处理器处理。可以这样理解,PHP代码提供给“PHP预处理器”处理,而PHP注释则是提供给“程序员”处理。PHP支持如下3种注释风格。

第1种:/多行注释风格/
第2种://单行注释风格
第3种:#单行注释风格

例如,下面的程序annotation.php中使用了3种注释风格。

图像说明文字

程序annotation.php中,除了存在PHP代码的注释以外,还存在HTML代码的注释(使用注释风格为HTML代码添加注释)。使用HTML代码的这种方法注释时,注释的内容可以在HTML页面源代码中看到。程序annotation.php的运行结果如图2-1所示,右键单击该页面,可以查看该页面的源文件(见图2-2)。通过annotation.php源程序、运行结果以及源文件的对比可以得知,PHP代码中的注释被PHP预处理器忽略,HTML代码中的注释则原封不动地输出到浏览器,浏览器接收到HTML注释后,忽略注释的内容,但该注释内容在源文件中存在。

图像说明文字

2.1.3 PHP语句及语句块

PHP程序一般由若干条PHP语句构成,每条PHP语句完成某项操作。PHP中的每条语句以英文分号“;”结束,只有PHP结束标记之前的PHP语句可以省略结尾分号“;”。书写PHP代码时,一条PHP语句一般占用一行,但是一行写多条PHP语句或者一条PHP语句占多行也是合法的(可能导致代码可读性差,不推荐)。

如果多条PHP语句之间密不可分,可以使用“{”和“}”将这些PHP语句包含起来形成语句块。例如,程序sentence.php如下。

图像说明文字

单独使用语句块时没有任何意义,语句块只有和条件控制语句(if…else)、循环语句(for和while)、函数等一起使用时才有意义。

2.2 PHP程序的组成

从功能的角度,完整的PHP程序可以划分为3个组成部分:数据的采集、数据的处理和数据的输出,其中PHP的数据采集主要包括3个过程:浏览器端的数据采集、浏览器端数据的提交和PHP程序的数据采集,如图2-3所示。在图2-3中,浏览器用户访问注册页面(如register.html),register.html页面为浏览器用户提供一个图形界面(如FORM注册表单)采集用户的数据。浏览器用户在FORM表单中输入个人信息,单击“提交”按钮后,浏览器负责将用户信息提交到WEB服务器某个动态页面(如register.php程序)。register.php程序负责采集浏览器端的用户信息,再对采集到的用户信息进行数据处理,并将处理结果输出,告知浏览器用户处理结果。

图像说明文字

2.2.1 关于PHP数据

数据位于程序的核心,如何快速、安全地管理内存中的数据显得格外重要。PHP与传统的高级语言的相同之处如下。

(1)PHP使用变量或常量实现数据在内存中的存储,并使用变量名(如$userName)或常量名(例如PI)实现了内存数据的按名存取。
(2)PHP使用等于号“=”(赋值运算符)给变量赋值。
(3)PHP不允许直接访问一个未经初始化的变量,否则PHP预处理器会提示类似下面的Notice信息:Notice: Undefined variable: a in C:\wamp\www\2\sample.php on line 2。
(4)PHP提供变量作用域的概念实现内存数据的安全访问控制。
(5)PHP引入了数据类型的概念修饰和管理数据。

PHP与传统的高级语言的不同之处如下。

(1)PHP变量名之前要加美元符号“$”标识,例如变量$userName。
(2)PHP是一种“弱类型的语言”,声明变量或常量时,不需要事先声明变量或常量的数据类型,PHP会自动由PHP预处理器根据变量的值将变量转换成适当的数据类型。例如,程序looseType.php如下。

<?php
$a = 0;
$a = 0.00;
?>

程序looseType.php中创建了一个$a变量,当将整数0赋值给变量$a时,$a是一个整型变量;当将浮点数(带有小数点的数)0.00赋值给变量$a时,$a又变成一个浮点型的变量。

2.2.2 PHP数据类型

PHP数据类型分为4种:标量数据类型、复合数据类型、特殊数据类型和伪类型。其中标量数据类型共有4种:布尔型、整型、浮点型和字符串型。复合数据类型共有两种:数组和对象。特殊数据类型有资源数据类型和空数据类型。伪类型通常在函数的定义中使用。

1.标量数据类型

(1)布尔型(boolean)。布尔型是最简单的数据类型,布尔型的值要么为FALSE(逻辑“假”),要么为TRUE(逻辑“真”),且FALSE和TRUE不区分大小写(如TRUE和true是等效的)。例如,程序boolean.php如下。

<?php
$a = TRUE;
$b = FALSE;
echo $a;
echo "
";
echo $b;
?>

程序boolean.php的运行结果如图2-4所示。

图像说明文字

(2)整型(integer)。PHP中整型数据类型的数据指的是不包含小数点的实数。在32位操作系统中,整型数据的有效范围为−2 147 483 648~2 147 483 647。整型数据可以用十进制、八进制或十六进制表示,并且可以包含正号(+)和负号(−)。为了区分十进制数,八进制整数前必须加上0(零),十六进制整数前必须加上0x。例如,程序int.php如下。

图像说明文字

(3)浮点型(float或double)。浮点型数据就是通常所说的带小数点的实数。例如,程序float.php如下。

图像说明文字

(4)字符串型(string)。字符串数据是一个字符的序列。组成字符串的字符是任意的,可以是字母、数字或者符号,在PHP中没有对字符串的最大长度进行严格的规定。字符串最简单的指定方法是使用一对单引号(')或者一对双引号(")。例如,程序string.php如下。

<?php
$string1 = 'string1';
$string2 = "string2";
$string3 = 'string3$string1'; //$string3变量的值为:string3$string1
$string4 = "string4$string1"; //$string4变量的值为:string3string1
echo $string1; //输出:string1
echo "
";
echo $string2; //输出:string2
echo "
";
echo $string3; //输出:string3$string1
echo "
";
echo $string4; //输出:string4string1

?>

2.复合数据类型

(1)数组(array)。PHP数组由一组有序的变量组成,每个变量称为一个元素,每个元素由键和值构成。由于PHP数组中元素的键不能相等(= =),因此可以根据键唯一确定一个数组元素。同一个PHP数组中,各元素中的键既可以是数字编号,也可以是字符串;同一个PHP数组中,各元素的值既可以是标量数据类型数据,也可以是复合数据类型数据(如数组、对象)。在传统的高级语言中,数组都是静态的,在定义数组前必须指定数组的长度,而在PHP中,数组是动态的,在定义数组时不必指定数组的长度。例如,程序array.php如下。

图像说明文字

(2)对象(object)。客观世界中的一个事物就是一个对象,每个客观事物都有自己的特征和行为。从程序设计的角度来看,事物的特征就是数据,也叫成员变量;事物的行为就是方法,也叫成员方法。面向对象的程序设计方法就是利用客观事物的这种特点,将客观事物抽象为“类”,而类是对象的“模板”。例如,程序Student.class.php如下。

图像说明文字

程序Student.class.php首先定义了一个Student类,该类由成员变量$name、$sex和$birthday以及成员方法setName($name)和getName()组成。通过对类进行实例化,可以得到一个对象。在程序Student.class.php中,通过使用new关键字实例化一个$student对象,然后就可以使用如下方式访问该对象的成员变量和成员方法。

  • 访问成员变量的方法:对象->成员变量(如$student ->name)
  • 访问成员方法的方法:对象->成员方法(如$student->getName())

面向对象程序设计是软件设计和实现的有效方法,随着PHP面向对象技术的日趋完善,为了便于程序的模块化开发以及程序的后期维护,很多功能都可以通过PHP面向对象技术实现。

3.特殊数据类型

(1)资源数据类型(resourse)。资源是PHP提供的一种特殊数据类型,这种数据类型用于表示一个PHP的外部资源,如一个数据库的连接或者一个文件流等。PHP提供了一些特定的函数(所谓函数是指完成特定功能的代码段)建立资源和使用资源。例如,PHP提供的mysql_connect()函数用于建立一个MySQL服务器的连接,PHP提供的fopen()函数用于打开一个文件等,这些函数的返回值为资源数据类型。例如,程序resource.php如下,该程序的运行结果如图2-5所示。

图像说明文字

resource.php程序中,var_dump()函数的功能是输出函数参数的数据类型。

(2)空(Null)。NULL是一个特殊的数据类型,该数据类型只有一个NULL值,用来标识一个不确定或不存在的数据。NULL不区分大小写,即null和NULL是等效的。例如,程序null.php如下,该程序的运行结果如图2-6所示。

图像说明文字

图像说明文字

4.伪类型

PHP引入4种伪类型用于指定一个函数的参数或返回值的数据类型。

(1)mixed。mixed 说明函数可以接受(或返回)不同类型的数据(但不是所有类型的数据)。
(2)number。number 说明函数可以接受(或返回)整型或者浮点型数据。
(3)void。void说明函数没有参数或返回值。
(4)callback。callback说明函数可以接受用户自定义的函数作为一个参数。例如,call_user_function()或usort()函数。

2.2.3 浏览器端的数据采集

浏览器端数据的采集主要依靠HTML提供的FORM表单实现。FORM表单是包含一系列表单元素的区域,表单元素是允许用户在表单中输入信息的元素。常见的表单元素有:文本域、下拉列表、单选框、复选框等。以“用户注册系统”为例,创建一个用户注册的FORM表单的方法是:在“C:\wamp\www\2\”目录下新建register.html文件,以记事本方式打开该文件后,输入如下代码并保存该文件。

图像说明文字

打开浏览器,在地址栏中输入“http://localhost/2/register.html”回车,即可访问到register.html静态页面,如图2-7所示。

图像说明文字

register.html程序说明如下。

(1)HTML中的字符序列“ ”被浏览器解析为一个空格
(2) < form> < /form > 标签是创建FORM表单所需的基本标签,每一个表单必须以

标签起始,以< / form>标签结束。

① 必要时给标签指定action属性指定FORM表单的处理程序。例如action="register.php"意味着单击FORM表单的“提交”按钮后,表单数据提交给register.php程序处理。
② 必要时给标签指定method属性指定FORM表单的提交方式。表单的提交方式默认为GET提交方式,当FORM表单以GET提交方式向WEB服务器提交数据时,提交数据将显示在浏览器地址栏中。

(3)< input />标签定义了可以输入信息的区域,< input />标签必须定义一个接受类型的type属性,type属性可能的属性值包括text(文本框)、button(按钮)、checkbox(复选框)、file(文件)、hidden(隐藏字段)、image(图像)、password(密码框)、radio(单选按钮)、reset(重置按钮)、submit(提交按钮)等,指定属性值时用单引号(')或者双引号(")指定。例如,type="text"、type="password"、type="submit"或type="reset"等。

① 必要时给< input/>标签指定name属性为标签命名,建议以语义化的方式为< input/>标签命名(见名知意)。例如,name="userName"、name="password"等。
② 必要时给< input/>标签指定value属性为标签设置初始值。例如value=" 提 交 "、value=" 重 填 "。
③ 当< input />标签type的属性值为"submit"时,该元素在浏览器中渲染为一个提交按钮。单击提交按钮后,填写好的表单数据就会被提交到指定的程序进行处理,例如,register.html程序的FORM表单数据被提交到register.php程序进行处理。
④ 当< input />标签type的属性值为"reset"时,该元素在浏览器中渲染为一个重置按钮。单击重置按钮后,填写好的表单数据将被设置为value属性初始值。

2.2.4 PHP程序的数据采集

FORM表单创建好后,就可以编写PHP程序“采集”FORM表单提交过来的数据了,步骤如下。

(1)在“C:\wamp\www\2\”目录下新建register.php文件,输入如下代码。

图像说明文字

(2)保存register.php文件内容后,打开浏览器并在浏览器地址栏中输入“http://localhost/2/ register.html”重新访问register.html页面,然后在表单文本框和密码框中输入如图2-8所示信息,单击“提交”按钮后,register.html页面中填写的数据被提交到register.php页面。register.php页面使用$_GET接收表单中对应元素的值,并将用户填写在表单元素的数据打印在register.php页面上,如图2-9所示。

图像说明文字

图像说明文字

由于register.html的FORM表单的提交方式为GET提交方式,PHP程序需使用$_GET采集表单中对应元素的值。

2.2.5 PHP数据处理

PHP程序“采集”到表单数据后,必要时需对这些数据进行加工处理,PHP一般使用运算符、控制语句和函数等对数据进行加工处理。对于“用户注册系统”而言,最简单的数据加工处理如下。

(1)判断password和confirmPassword的值是否一致,若一致则提示用户可以注册,否则提示用户重新输入用户名和密码。
(2)若password和confirmPassword的值一致,将password加密。 为了实现这些数据的加工处理,需要将register.php程序的代码修改为如下代码。

图像说明文字

修改后的register.php程序说明如下。

(1)register.php中使用了“= =”比较运算符、条件控制if…else语句和md5()函数对“采集”到的表单数据进行处理。
(2)register.php中使用了md5()函数,该函数的语法格式为:string md5(string str)。

md5()函数的功能是将传递到md5()函数的字符串str转换为32位的密文,实现数据加密功能。两个相等的字符串(使用“= =”比较)经md5()函数加密后,得到相同的密文。例如程序md5.php如下。

图像说明文字

由于字符串"abcdefg"和"Abcdefg"不相等(使用“= =”比较),因此它们的加密结果不相同;由于字符串"10"和整数10相等(使用“= =”比较),因此它们的加密结果相同。

2.2.6 PHP数据的输出

PHP经常使用echo语句向浏览器输出字符串数据,除了echo语句外,还可以使用print语句或printf()函数向浏览器输出字符串数据。echo与print输出的是没有经过格式化的字符串,而printf()函数则是输出经过格式化的字符串。对于复合数据类型的数据(如数组或对象),可选用print_r()函数输出。实际编程过程中,经常使用输出语句对程序进行调试。

1.print和echo

print和echo两者的功能几乎完全一样,都用于向页面输出字符串。例如可以将register.php程序修改为如下代码完成相同的功能(粗体字为代码修改部分)。

图像说明文字

echo和print之间区别是:使用echo可以同时输出多个字符串(多个字符串之间使用逗号隔开即可),而print一次只能输出一个字符串。register.php代码也可以修改为如下代码(粗体字为代码修改部分)。

图像说明文字

echo和print之间的其他区别如下。

(1)在echo前不能使用错误抑制运算符“@”。

(2)print()也可以看做是一个有返回值的函数,此时print能作为表达式的一部分,而echo不能。

2.输出运算符“<?= ?>”

如果HTML代码块中只嵌入一条PHP语句,且该PHP语句是一条输出语句,此时若使用echo或print语句输出字符串不仅显得麻烦,而且降低了程序的易读性。PHP提供另一种便捷的方法:使用输出运算符“<?= ?>”输出字符串数据。可以将程序htmlWithPHP.php修改为如下代码,增强程序的易读性(粗体字为代码修改部分,其他代码不变)。

图像说明文字

3.print_r()函数

对于复合数据类型的数据输出,经常使用print_r()函数。使用print_r()函数输出数组中的元素或对象中的成员变量时,将按照“键”=>“值”对或“成员变量名”=>“值”的方式输出元素或对象的内容。例如,程序print_r.php如下。

图像说明文字

2.3 编 码 规 范

俗话说,没有规矩,不成方圆。养成良好的编程习惯,能够提高代码质量和效率;而不良的编程习惯会造成代码缺陷,使其难以维护,并且很可能在维护时又引入新的缺陷。书写PHP代码时需要遵循一些基本的编程原则,这些原则称为编码规范。下面介绍一些常用的编码规范,这些规范对任何一个追求高质量的代码的人来说是必需的。

2.3.1 书写规范

1.缩进

每个缩进的单位约定是一个Tab(制表符)。语句块中的第一条语句需要缩进,同一个语句块中的所有语句上下对齐。

2.大括号{}

左大括号与关键词(如if、else、for、while、switch等)同行,右大括号与关键字同列。下面是符合上述两个书写规范的示例程序。

图像说明文字

3.运算符

每个运算符与两边参与运算的值或表达式中间要有一个空格,唯一的特例是字符串连接运算符号两边不加空格。下面是符合该规范的示例程序。

<?php
$b = 2;
$c = 3;
$a = $b + $c;
?>

2.3.2 命名规范

使用良好的命名也是重要的编程习惯,描述性强的名称让代码更加容易阅读、理解和维护。命名遵循的基本原则是:以标准计算机英文为蓝本,杜绝一切拼音或拼音英文混杂的命名方式,建议使用语义化的方式命名。

1.类

类名每一个单词首字母大写,如类名StudentCourse。下面是符合该规范的示例程序。

class StudentCourse{ }

2.常量

常量名所有字母大写,单词间用下画线分隔,如常量名NULL、TRUE、FALSE、ROOT_PATH、PI等。下面是符合该规范的示例程序。

<?php
define("PI", 3.1415);//定义常量时,需使用define()函数
?>

3.变量

为了保证软件代码具有良好的可读性,一般要求在同一个软件系统中,变量的命名原则必须统一。例如,同一个软件系统,变量的命名可以为第一个单词首字母小写,其余单词首字母大写(驼峰),如变量名$userID、$userName。教材中有关用户注册系统中定义的变量使用该规则定义变量名。同一个软件系统,变量的命名也可以为单词所有字母小写,单词间用下画线分隔,如变量名$user_id、$student_name。教材中有关新闻发布系统中定义的变量使用该规则定义变量名。

4.数组

数组是一个可以存储多个数组元素的容器,因此在为数组命名时,尽量使用单词的复数形式,如$words、$numbers、$colors、$students、$interests等。

5.函数

函数的命名规范和变量名的命名规范相同。通常函数都是执行一个动作的,因此函数命名时,一般函数名中会包含动词,如函数名getName、setName分别表示取得name值和设置name值。下面是符合该规范的示例程序。

function getName(){
return $this->name;
}

6.数据库表字段

数据库表字段的命名规范和变量名的命名规范相同,如字段名user_id、student_name。

7.类文件

PHP类文件命名时通常以.class.php为后缀,文件名和类名相同,如Student.class.php。

2.3.3 为代码添加注释

软件开发是一种高级脑力劳动,精妙的算法之后往往伴随着难以理解的代码,对于不经常维护的代码,往往连开发者本人也忘记编写的初衷。要为代码添加注释,增强代码的可读性和可维护性。有时添加注释和编写代码一样难,但养成这样的习惯是必要的。请记住:尽最大努力把方便留给别人和将来的自己。

目录

  • 第1章 PHP入门
  • 第2章 PHP基础
  • 第3章 PHP表达式
  • 第4章 PHP流程控制语句
  • 第5章 PHP数组
  • 第6章 PHP的数据采集
  • 第7章 自定义函数
  • 第8章 MySQL数据库
  • 第9章 PHP与MySQL数据库
  • 第10章 新闻发布系统的开发
  • 第11章 PHP会话控制
  • 第12章 字符串处理
  • 第13章 新闻发布系统的页面美工

同系列书

  • 微机原理、汇编语言与接口技术

    周杰英 张萍 郭雪梅 黄方军

      本书全面系统地论述了Intel 80x86系列机中16位微型计算机的基本原理、汇编语言程序设计和接口技术,...

    ¥39.50
  • VB语言程序设计教程(第2版)

    杨忠宝 刘向东 康顺哲 官宇哲

    本书作者在多年教学经验基础上,并根据学生的认知规律精心组织了本教材内容,并通过大量有现实意义的例题,深入浅出地...

    ¥39.80
  • Windows系统编程

    李晓黎

      Windows是个人计算机上最流行的操作系统,在国内外拥有众多家庭和商务用户,因此Windows系统编程可...

    ¥45.00
  • C语言程序设计

    宋万干 肖建于

    本书主要介绍C语言程序设计的相关知识。针对没有程序设计基础的读者,本书详细介绍了C语言的基本概念、语法及编程技...

    ¥39.80
  • 数据库系统原理与应用

    孟彩霞

      本书主要介绍数据库系统的基本概念和基本理论、应用技术和设计方法。内容包括数据模型和数据库系统结构、关系代数...

    ¥26.00
  • 面向对象程序设计及C++(第2版)

    朱立华 俞琼 郭剑 朱建

      本书是为已经掌握C语言知识,需要学习C++语言的读者编写的一本C++语言入门教材。   全书共分9章。第...

    ¥38.00
  • Java Web应用技术与案例教程

    杨树林 胡洁萍

      Java Web应用技术是当今最主流的Web程序开发技术之一。目前无论是高校的计算机专业,还是IT培训学校...

    ¥42.00
  • C语言程序设计——从入门到进阶

    巨同升 孙福振 薛磊江 贾凌

      本书在内容编排上,采用“应用驱动知识”的方式,即根据每一章应用目标的需求,合理地安排每一个知识主题的引入点...

    ¥26.50
人邮微信
本地服务
教师服务
教师服务
读者服务
读者服务
返回顶部
返回顶部